Java 字段的问题在于它的类型是另一个类

Java 字段的问题在于它的类型是另一个类,java,spring,converters,Java,Spring,Converters,我创建了一个字段,该字段被转换成另一个类,通过该类我可以得到json,问题发生在哪里,但我不明白我做错了什么 用户类 public class User extends BaseEntity<Integer> { private String firstName; private String lastName; @Column(name = "username") private String username; @Convert(converter = Pur

我创建了一个字段,该字段被转换成另一个类,通过该类我可以得到json,问题发生在哪里,但我不明白我做错了什么

用户

public class User extends BaseEntity<Integer> {
  private String firstName;
  private String lastName;
  @Column(name = "username")
  private String username;
  @Convert(converter = PurshasedProductConverter.class)
  private PurshasedProductConverter purshasedProducts;
}
public class PurshasedProductConverter implements AttributeConverter<PurshasedProduct, String> {

  private static final Logger LOG = (Logger) LoggerFactory.getLogger(PurshasedProductConverter.class);

  private final ObjectMapper mapper = new ObjectMapper();

  @Override
  public String convertToDatabaseColumn(PurshasedProduct attribute) {
    try {
        if (attribute != null)
            return mapper.writeValueAsString(attribute);
        else
        return null;
    } catch (JsonProcessingException e) {
        LOG.error(e.getMessage(), e);
        throw new RuntimeException(e);
    }
  }

  @Override
  public PurshasedProduct convertToEntityAttribute(String dbData) {
    TypeReference<HashMap<String, String>> typeRef
            = new TypeReference<HashMap<String, String>>() {
    };

    try {
        PurshasedProduct purshasedProduct = new PurshasedProduct();
        if (dbData != null)
            purshasedProduct.strings = mapper.readValue(dbData, typeRef);
        return purshasedProduct;
    } catch (IOException e) {
        LOG.error(e.getMessage(), e);
        throw new RuntimeException(e);
    }
  }
}
public class PurshasedProduct {

  public Map<String, String> strings = new HashMap<>();

  public static PurshasedProduct create(String key, String value) {
    PurshasedProduct purshasedProduct = new PurshasedProduct();
    purshasedProduct.set(key, value);
    return purshasedProduct;
  }

  public void set(String lang, String text) {
    if (text == null || lang == null) {
        return;
    }
    strings.put(lang, text);
  }

  public String get(String lang) {
    if (lang == null) {
        return null;
    }
    if (strings.containsKey(lang)) {
        return strings.get(lang);
    }
    return null;
  }

  public void remove(String lang) {
    if (lang == null) {
        return;
    }
    if (strings.containsKey(lang)) {
        strings.remove(lang);
    }
  }

  public Set<String> getLangs() {
    return strings.keySet();
  }

  @Override
  public boolean equals(Object o) {
    if (this == o) return true;

    if (o == null || getClass() != o.getClass()) return false;

    PurshasedProduct that = (PurshasedProduct) o;

    return CollectionUtils.isEqualCollection(strings.entrySet(), that.strings.entrySet());
  }

  @Override
  public String toString() {
    return "PurshasedProduct{" +
            "products=" + strings +
            '}';
  }
}
PurshasedProduct
class

public class User extends BaseEntity<Integer> {
  private String firstName;
  private String lastName;
  @Column(name = "username")
  private String username;
  @Convert(converter = PurshasedProductConverter.class)
  private PurshasedProductConverter purshasedProducts;
}
public class PurshasedProductConverter implements AttributeConverter<PurshasedProduct, String> {

  private static final Logger LOG = (Logger) LoggerFactory.getLogger(PurshasedProductConverter.class);

  private final ObjectMapper mapper = new ObjectMapper();

  @Override
  public String convertToDatabaseColumn(PurshasedProduct attribute) {
    try {
        if (attribute != null)
            return mapper.writeValueAsString(attribute);
        else
        return null;
    } catch (JsonProcessingException e) {
        LOG.error(e.getMessage(), e);
        throw new RuntimeException(e);
    }
  }

  @Override
  public PurshasedProduct convertToEntityAttribute(String dbData) {
    TypeReference<HashMap<String, String>> typeRef
            = new TypeReference<HashMap<String, String>>() {
    };

    try {
        PurshasedProduct purshasedProduct = new PurshasedProduct();
        if (dbData != null)
            purshasedProduct.strings = mapper.readValue(dbData, typeRef);
        return purshasedProduct;
    } catch (IOException e) {
        LOG.error(e.getMessage(), e);
        throw new RuntimeException(e);
    }
  }
}
public class PurshasedProduct {

  public Map<String, String> strings = new HashMap<>();

  public static PurshasedProduct create(String key, String value) {
    PurshasedProduct purshasedProduct = new PurshasedProduct();
    purshasedProduct.set(key, value);
    return purshasedProduct;
  }

  public void set(String lang, String text) {
    if (text == null || lang == null) {
        return;
    }
    strings.put(lang, text);
  }

  public String get(String lang) {
    if (lang == null) {
        return null;
    }
    if (strings.containsKey(lang)) {
        return strings.get(lang);
    }
    return null;
  }

  public void remove(String lang) {
    if (lang == null) {
        return;
    }
    if (strings.containsKey(lang)) {
        strings.remove(lang);
    }
  }

  public Set<String> getLangs() {
    return strings.keySet();
  }

  @Override
  public boolean equals(Object o) {
    if (this == o) return true;

    if (o == null || getClass() != o.getClass()) return false;

    PurshasedProduct that = (PurshasedProduct) o;

    return CollectionUtils.isEqualCollection(strings.entrySet(), that.strings.entrySet());
  }

  @Override
  public String toString() {
    return "PurshasedProduct{" +
            "products=" + strings +
            '}';
  }
}
看一看:

@Convert(converter = PurshasedProductConverter.class)
private PurshasedProductConverter purshasedProducts;
您在注释和字段类型中也使用了
PurshasedProductConverter
。您应该将其更改为在
PurshasedProductConverter
中从/转换为的字段类型

@Convert(converter = PurshasedProductConverter.class)
private PurshasedProduct purshasedProducts;

这是主要问题。检查您在哪里使用了错误的类型,并调整您的代码:原因:java.lang.IllegalArgumentException:无法将aa.utils.PurshasedProductConverter字段aa.model.User.purshasedProducts设置为aa.model.purshasedProducts这是所有代码您是否理解错误消息所说的内容?我在用户模型中使用此类型我不理解您自己的问题:您想如何获取
PurshasedProduct
值来自
User
类,如果您有
PurshasedProductConverter
对象类型而不是
PurshasedProduct
,则PurshasedProductConverter获取PurshasedProduct不会以这种方式工作。您将
@Converter
注释与实现适当接口的类一起使用。当您将该实体保存到数据库或从数据库中获取该实体时,spring已经有足够的信息来执行基于反射的操作,以便在后台转换该对象。