Java 字段的问题在于它的类型是另一个类
我创建了一个字段,该字段被转换成另一个类,通过该类我可以得到json,问题发生在哪里,但我不明白我做错了什么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
用户
类
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已经有足够的信息来执行基于反射的操作,以便在后台转换该对象。