Spring Jackson条件根包装 [英] Spring Jackson conditional root wrapping
问题描述
我有一个域对象,对于一个请求,我只需要用row包装root(对于DataTables Editor)。
I have a domain object that for one request only I need to wrap the root with "row" (for DataTables Editor).
问题是我只希望根包装在一个控制器方法的响应体中。
The problem is that I only want the root wrapped in the response body of one controller method.
有关如何仅在一个控制器方法中有条件地启用根包装的任何建议吗?我想在一个方法中启用它,然后在*控制器周围写一个切入点以在后续请求中禁用它,但是有一个更好的方法......
Any suggestions how to conditionally enable root wrapping in one controller method only? I thought about enabling it in the one method and then writing a pointcut around *controller to disable it on subsequent requests, but there's gotta be a better way...
我的Spring配置是:
My Spring configuration is:
@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(row)
This works except for the case where I want to wrap my POJO using @JsonRootName, e.g.: @JsonRootName("row")
推荐答案
我通过创建一个新的对象映射器解决了这个问题控制器并将JSON作为String返回,例如:
I solved the problem by creating a new object mapper in the controller and returning the JSON as a String, e.g.:
ObjectMapper rootMapper = new ObjectMapper();
rootMapper.enable(SerializationFeature.WRAP_ROOT_VALUE);
return rootMapper.writeValueAsString(myObject);
这也意味着配置一个String消息转换器:
This also meant configuring a String message converter:
@Bean
public StringHttpMessageConverter stringMessageConverter() {
StringHttpMessageConverter converter = new StringHttpMessageConverter();
converter.setSupportedMediaTypes(Arrays.asList(MediaType.APPLICATION_JSON));
return converter;
}
这篇关于Spring Jackson条件根包装的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!