Spring Jackson条件根包装

时间:2015-05-14 19:52:26

标签: java spring spring-mvc jackson

我有一个域对象,对于一个请求,我只需要用“row”包装root(对于DataTables Editor)。

问题是我只想将root包装在一个控制器方法的响应体中。

有关如何仅在一个控制器方法中有条件地启用根包装的任何建议吗?我想在一个方法中启用它然后在*控制器周围写一个切入点以在后续请求中禁用它,但是必须有一个更好的方法......

我的Spring配置是:

@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
    converters.add(jackson2Converter());
}

@Bean
public MappingJackson2HttpMessageConverter jackson2Converter() {
    MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
    converter.setObjectMapper(objectMapper());
    return converter;
}

@Bean
public ObjectMapper objectMapper() {
    ObjectMapper objectMapper = new ObjectMapper();
    return objectMapper;
}

除了我想用@JsonRootName包装我的POJO的情况之外,这是有效的,例如:     @JsonRootName( “行”)

1 个答案:

答案 0 :(得分:0)

我通过在控制器中创建一个新的对象映射器并将JSON作为String返回来解决了这个问题,例如:

ObjectMapper rootMapper = new ObjectMapper();
rootMapper.enable(SerializationFeature.WRAP_ROOT_VALUE);
return rootMapper.writeValueAsString(myObject);

这也意味着配置String消息转换器:

@Bean
public StringHttpMessageConverter stringMessageConverter() {
    StringHttpMessageConverter converter = new StringHttpMessageConverter();
    converter.setSupportedMediaTypes(Arrays.asList(MediaType.APPLICATION_JSON));
    return converter;
}