无法配置混合杰克逊在
问题描述:
能否请你帮我正确配置杰克逊混淆与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功能,就像你现在使用它们。
总是可以在XML中使用'FactoryBean'。 – 2014-08-30 18:21:10
@SotiriosDelimanolis一如既往地出现!但是你也需要掌握'''''这会让事情变得复杂一点。这就是为什么刚刚使用Java Config。在我看来,在大多数情况下它更直观 – geoand 2014-08-30 18:32:24