我在MVC中使用Spring5.0,并为实体提供了一个自定义(反)序列化程序。
@JsonDeSerialize(using = RoleDeserializer.class)
public class Role implements Serializable {
....对于反序列化我有(StdDesializer不会改变任何东西)
public class RoleDeserializer extends JsonDeserializer<Role> {
EntityManager em;
public RoleDeserializer(EntityManager em) {
this.em = em;
}
....这总是给我一个例外
MappingJackson2HttpMessageConverter:205 Failed to evaluate Jackson deserialization for type [[simple type, class test.Role]]: c
om.fasterxml.jackson.databind.JsonMappingException: Class test.RoleDeserializer has no default (no arg) constructor但是不知怎么的,我需要那个构造函数,因为如果我这样做的话
public class RoleDeserializer extends JsonDeserializer<Role> {
@PersitenceContext
EntityManager em;
....在em上使用@PersitenceContext的自动注释不起作用,因为它没有注入Spring,即没有初始化。
备注:遵循suggestions,我无法解决这个问题。行为的原因在link中解释了-但这并不排除异常:-/
我们非常感谢你的帮助。
发布于 2018-01-24 11:46:52
在我的问题提示之后,我想出了如何在Spring5.0中解决这个问题(很可能在4.1.1中也是如此)--没有XML:
@EnableWebMvc
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
final HashMap<Class<?>, JsonDeserializer<?>> map = new HashMap<>();
map.put(Role.class, new RoleDeserializer());
// more classes could be easily attached the same way...
builder.deserializersByType(map);
converters.add(new MappingJackson2HttpMessageConverter(builder.build()));
}
}在此之后,注释@Autowired或@PersistenceContext可以像类中所期望的那样工作:-) Thx用于支持!
https://stackoverflow.com/questions/48419578
复制相似问题