Java 在控制器中设置spring jackson Bean属性过滤器
我试图使用jackson序列化对象的层次结构,但我必须在每个控制器方法中使用不同的字段。目前,我这样做:Java 在控制器中设置spring jackson Bean属性过滤器,java,json,spring,filter,jackson,Java,Json,Spring,Filter,Jackson,我试图使用jackson序列化对象的层次结构,但我必须在每个控制器方法中使用不同的字段。目前,我这样做: @RequestMapping(value = "/chat/message/create", headers = "Accept=application/json", produces = MediaType.APPLICATION_JSON_VALUE, method = RequestMethod.GET
@RequestMapping(value = "/chat/message/create",
headers = "Accept=application/json",
produces = MediaType.APPLICATION_JSON_VALUE,
method = RequestMethod.GET
)
@Transactional
public @ResponseBody
ChatMessage createChatMessage(@RequestParam("chat_id") Integer chatId,
@RequestParam("chat_from_id") Integer chatFromId,
@RequestParam("chat_content") String content) {
User fromUser = userDAO.find(User.class, chatFromId);
ChatMessage message = new ChatMessage();
message.setContent(content);
message.setLastUpdateDate(new Date());
message.setFromUser(fromUser);
Chat chat = chatDAO.find(Chat.class, chatId);
message.setChat(chat);
chatMessageDAO.save(message);
ObjectMapper mapper = new ObjectMapper();
mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
FilterProvider filters = new SimpleFilterProvider()
.addFilter("chatMessageFilter", SimpleBeanPropertyFilter.serializeAllExcept(Collections.EMPTY_SET));
ObjectWriter writer = mapper.writer(filters);
try {
return writer.writeValueAsString(message);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
return null;
}
问题是我想使用MappingJackson2HttpMessageConverter,但我找不到一种方法来设置beanpropertyfilters列表的筛选器提供程序。我想这样做:
@RequestMapping(value = "/chat/message/create",
headers = "Accept=application/json",
produces = MediaType.APPLICATION_JSON_VALUE,
method = RequestMethod.GET
)
@Transactional
public @ResponseBody
ChatMessage createChatMessage(@RequestParam("chat_id") Integer chatId,
@RequestParam("chat_from_id") Integer chatFromId,
@RequestParam("chat_content") String content) {
User fromUser = userDAO.find(User.class, chatFromId);
ChatMessage message = new ChatMessage();
message.setContent(content);
message.setLastUpdateDate(new Date());
message.setFromUser(fromUser);
Chat chat = chatDAO.find(Chat.class, chatId);
message.setChat(chat);
chatMessageDAO.save(message);
getFilterProvider().addFilter("chatMessageFilter", SimpleBeanPropertyFilter.serializeAllExcept(Collections.EMPTY_SET));
return message;
}
getFilterProvider()将获取MappingJackson2HttpMessageConverter使用的FilterProvider。这样,我会在一种方法中设置5或6个过滤器,在另一种方法中设置一组完全不同的过滤器
注意:Json视图在这里对我没有帮助。它们太静态了,我无法组合指定嵌套对象使用哪些视图