如何过滤从 Spring Rest Web 服务返回的 json 响应

2024-03-23

如何过滤从 Spring Rest Web 服务返回的 json 响应。

当使用调用自定义事件时,我只需要输出事件 ID 和事件名称。当询问特定事件时我需要 发送活动的完整详细信息。

Class CustomEvent{

 long id;
 String eventName;
 Account createdBy;
 Account modifiedBy;
 ..


}

Class Account{
 long id;
 String fname;
 String lname;
 ....

}


@Controller
public class CustomEventService
{
    @RequestMapping("/customEvents")
    public @ResponseBody List<CustomEvent> getCustomEventSummaries() {}

    @RequestMapping("/customEvents/{eventId}")
    public @ResponseBody CustomEvent getCustomEvent(@PathVariable("eventId") Long eventId) {}
}

我怎样才能实现上述目标?我现在使用的是 spring 3.1。 3.1版本是否支持实现以上或更高版本


您可以使用@JsonFilter进行归档。

Pojo:

@JsonFilter("myFilter")
public class User {
    ....
}

控制器:

public String getUser(
            @RequestParam(value="id") String id, 
            @RequestParam(value="requiredFields",required=false ) String requiredFields
        ) throws JsonParseException, JsonMappingException, IOException {

    //Get User 
    User user = userService.getUser(id);
    //Start
    ObjectMapper mapper = new ObjectMapper();
    // and then serialize using that filter provider:
    String json="";
    try {
        if (requiredFields!= null) {
            String[] fields = requiredFields.split("\\,");

            FilterProvider filters = new SimpleFilterProvider().addFilter("myFilter",
            SimpleBeanPropertyFilter.filterOutAllExcept(new HashSet<String>(Arrays
                  .asList(fields))));

            json = mapper.filteredWriter(filters).writeValueAsString(user);//Deprecated 
        } else {
            SimpleFilterProvider fp = new SimpleFilterProvider().setFailOnUnknownId(false);
            mapper.setFilters(fp);
            json =mapper.writeValueAsString(user);
        }
    } catch (JsonGenerationException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (JsonMappingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    return json;
}

获取 URL: .....&requiredFields=id,姓名,年龄

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何过滤从 Spring Rest Web 服务返回的 json 响应 的相关文章

随机推荐