Не могу настроить микс Джексона в

Не могли бы вы помочь мне правильно настроить встраиваемую аннотацию 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 так же, как вы используете их сейчас.

Другие вопросы по тегам