无法配置混合杰克逊在

问题描述:

能否请你帮我正确配置杰克逊混淆与Spring MVC的注解定制JSON响应。无法配置混合杰克逊在

这是我现在有:

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> 
    <property name="messageConverters"> 
     <list> 
      <ref bean="jsonMessageConverter"/> 
     </list> 
    </property> 
</bean> 
<bean id="jsonMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/> 

我不知道如何配置它的2类映射...:addMixInAnnotations(User.class, UserMixIn.class);

DD的混入配置为ObjectMapper一旦被初始化在Controller构造:

@Controller 
public class MyController { 

    private ObjectMapper objectMapper = new ObjectMapper(); 

    public MyController(ObjectMapper objectMapper) { 
     this.objectMapper = objectMapper; 
     objectMapper.addMixInAnnotations(User.class, UserMixIn.class); 
    } 

    @RequestMapping("/some-path") 
    @ResponseBody 
    public String someMethod() { 
     List<User> users = new ArrayList<User>(); // Mock List to hold your Users 
     users.add(new User()); // Keep adding some users 
     return objectMapper.writeValueAsString(users, new TypeReference<List<User>>() {}); 
    } 
} 

并检查了输出:)

如果您只需要为单个控制器配置Mixin,那么@tmarwen给出的解决方案就可以很好地工作。

但是如果你想要使用的mixin thoughout您需要实现类似如下的方法所有的Spring控制器:

更改XML配置:

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> 
    <property name="messageConverters"> 
     <list> 
      <ref bean="jsonMessageConverter"/> 
     </list> 
    </property> 
</bean> 
<bean id="jsonMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> 
    <property name="objectMapper" ref="mapper"/> 
</bean> 

接下来,您需要配置mapper在上面的XML中引用的bean。使用SpEL和FactoryBean可以很容易地在XML中实现这一点,但是当您在Java Config中有一个优秀且超级易用的替代方案时,没有理由这么做。

@Configuration 
public class JacksonConfig { 

    @Bean 
    public ObjectMapper mapper() { 
     final ObjectMapper mapper = new ObjectMapper(); 
     mapper.addMixInAnnotations(User.class, UserMixIn.class); 
     return mapper; 
    } 
} 

被上面发生的变化,你需要绝对没有参照你的控制器ObjectMapper,并可以使用Spring MVC的JSON功能,就像你现在使用它们。

+1

总是可以在XML中使用'FactoryBean'。 – 2014-08-30 18:21:10

+0

@SotiriosDelimanolis一如既往地出现!但是你也需要掌握'''''这会让事情变得复杂一点。这就是为什么刚刚使用Java Config。在我看来,在大多数情况下它更直观 – geoand 2014-08-30 18:32:24