首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring &自定义JsonSerializer

Spring &自定义JsonSerializer
EN

Stack Overflow用户
提问于 2018-01-24 10:01:13
回答 1查看 1.7K关注 0票数 0

我在MVC中使用Spring5.0,并为实体提供了一个自定义(反)序列化程序。

代码语言:javascript
复制
@JsonDeSerialize(using = RoleDeserializer.class)
public class Role implements Serializable { 
....

对于反序列化我有(StdDesializer不会改变任何东西)

代码语言:javascript
复制
public class RoleDeserializer extends JsonDeserializer<Role> {
  EntityManager em;
  public RoleDeserializer(EntityManager em) {
        this.em = em;
  }
....

这总是给我一个例外

代码语言:javascript
复制
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

但是不知怎么的,我需要那个构造函数,因为如果我这样做的话

代码语言:javascript
复制
public class RoleDeserializer extends JsonDeserializer<Role> {
@PersitenceContext
EntityManager em;
 ....

em上使用@PersitenceContext的自动注释不起作用,因为它没有注入Spring,即没有初始化。

备注:遵循suggestions,我无法解决这个问题。行为的原因在link中解释了-但这并不排除异常:-/

我们非常感谢你的帮助。

EN

回答 1

Stack Overflow用户

发布于 2018-01-24 11:46:52

在我的问题提示之后,我想出了如何在Spring5.0中解决这个问题(很可能在4.1.1中也是如此)--没有XML:

代码语言:javascript
复制
@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用于支持!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48419578

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档