Spring @JsonView如何使用请求参数或头文件

时间:2016-02-15 07:32:14

标签: spring spring-mvc spring-boot jackson

documentation

如何使用来自请求的参数:

range

当响应值时,读取请求标头update table set col3 = (SELECT CASE WHEN (col2 is null OR col1 < col2 ) THEN col1 ELSE col2 END AS col3 FROM table WHERE col1 is not null or col2 is not null)`. 以排除/包含某些字段

1 个答案:

答案 0 :(得分:1)

JsonView提供&#34;静态&#34;视图映射。所以对于你的动态行为你可以这样做:

// actual request handling is happened here
private ResponseEntity<SomeObject> processRequest();

// request handling with view limit in result
@JsonView(YourDefinedView.class)
@RequestMapping(value = "/request", headers={"range=include"}) 
public ResponseEntity<SomeObject> processWithView() {
    return processRequest();
}


// request handling without view (no headers specified) 
@RequestMapping(value = "/request")
public ResponseEntity<SomeObject> processWithoutView() {
    return processRequest();
}

这会将您的客户端映射到相同的请求网址,但根据标头,它会提供视图与否。您可以创建一组方法,根据标题信息使用不同的@JsonView

但是这样你只会限制传输到客户端的数据,整个数据加载将在服务器上发生。例如,对于数据库和JPA,如果您不想从数据库中获取所有数据,那么将以javax.persistence.NamedEntityGraphs结束,这将改变应用程序的一般逻辑 - 并且在一天结束时将生成2个不同的数据方法

如果您希望公开带有字段列表的自定义标题,要进行序列化 - 自定义DTO对象,或Map<String, Object>(丑陋丑陋)或自定义HandlerMethodReturnValueHandler来帮助您。