我有一个域对象,对于一个请求,我只需要用“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( “行”)
答案 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;
}