Не могу настроить микс Джексона в
Не могли бы вы помочь мне правильно настроить встраиваемую аннотацию 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);
2 ответа
Дд конфигурации миксин к 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>>() {});
}
}
И проверить вывод:)
Решение, данное @tmarwen, будет прекрасно работать, если вам нужно настроить Mixin только для одного контроллера.
Однако, если вы хотите использовать mixin для всех контроллеров 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
bean-компонент, на который есть ссылка в XML-файле выше. Вы можете легко сделать это в XML с использованием SpEL и FactoryBean, но нет веской причины делать это, когда у вас есть отличная и очень простая в использовании альтернатива в Java Config.
@Configuration
public class JacksonConfig {
@Bean
public ObjectMapper mapper() {
final ObjectMapper mapper = new ObjectMapper();
mapper.addMixInAnnotations(User.class, UserMixIn.class);
return mapper;
}
}
После внесения вышеуказанных изменений вам абсолютно не нужна ссылка на ObjectMapper
в ваших контроллерах и может использовать функции JSON Spring MVC так же, как вы используете их сейчас.