您能否帮我正确配置 Jackson 混合注释与 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);
答案 0 :(得分:2)
在您的ObjectMapper
构造函数中初始化后,将mixin配置添加到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>>() {});
}
}
并查看输出:)
答案 1 :(得分:2)
如果您只需要为单个控制器配置Mixin,@ tmarwen提供的解决方案就可以正常工作。
但是,如果你想在所有Spring控制器中使用mixin,你需要实现类似于以下的方法:
将您的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>
接下来,您需要配置上面XML中引用的mapper
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功能,就像您现在使用它们一样。