Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在控制器中设置spring jackson Bean属性过滤器_Java_Json_Spring_Filter_Jackson - Fatal编程技术网

Java 在控制器中设置spring jackson Bean属性过滤器

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

我试图使用jackson序列化对象的层次结构,但我必须在每个控制器方法中使用不同的字段。目前,我这样做:

@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视图在这里对我没有帮助。它们太静态了,我无法组合指定嵌套对象使用哪些视图