【发布时间】:2020-01-22 23:27:01
【问题描述】:
我正在使用 Spring mvc 5.0.8 和 jackson 2.9.8
开发 Rest APIs如果客户端的 json 请求中不存在分页属性,我想为每个请求设置默认分页。
我通过从 HttpRequestEntity 类构造函数创建 Pagination 对象来实现这一点,但是如果 json 请求中存在分页请求,则 jackson 创建在调用 HttpRequestEntity 的 setter 方法(setPagination(Pagination pagination)) 之前,通过调用 Pagination 类的默认构造函数来增加一个 Pagination 对象强>类。
JackSon 如果 JSON 请求中不存在属性,则既不会创建属性对象也不会触发属性设置器方法
我也尝试过使用 Interceptor prepreHandle
request.setAttribute("pagination", new Pagination());
但这不会更新 HttpServletRequest's 正文,我必须使用 Controller's 参数接收该属性,该参数应使用 @RequestAttribute 进行注释。
根据我的理解 HttpMessageConverter 只映射 HttpServletRequest 正文与 spring 注释 @RequestBody。
Json 请求
{
//not sending pagination
/*
"pagination":{
"offset":0,
"limit:50
},
*/
"data":{
"requestUrl":"some value"
...
},
"timeStamp":"Mon Sep 23 2019 02:15:47 GMT+0530 (India Standard Time)"
}
控制器
@RestController
@RequestMapping("/api/v1")
public class LocaldbController {
@Autowired
private LocaldbService localdbService;
@PostMapping("/apidetails/filter")
public void getAllApiDetails(@RequestBody HttpRequestEntity<ApiDetailsFilterDto> requestEntityDto) {
System.out.println(requestEntityDto.getPagination().getLimit());
}
}
public class HttpRequestEntity<T> {
public Pagination pagination;
private T data;
private String timeStamp;
public HttpRequestEntity() {
this.pagination = new Pagination(); //To set Default value
}
public Pagination getPagination() {
return pagination;
}
public T getData() {
return data;
}
public String getTimeStamp() {
return timeStamp;
}
public void setTimeStamp(String timeStamp) {
this.timeStamp = timeStamp;
}
public void setPagination(Pagination pagination) {
this.pagination = pagination;
}
}
public class Pagination {
private int offset = 0;
private int limit = 50;
public Pagination() {
System.out.println("pagination");
}
public int getOffset() {
return offset;
}
public int getLimit() {
return limit;
}
public void setOffset(int offset) {
this.offset = offset;
}
public void setLimit(int limit) {
this.limit = limit;
}
}
所以任何人都可以告诉我,如果 JSON 请求中不存在属性,如何将 默认值 设置为 属性。
感谢您的关注。期待您的回复。
【问题讨论】:
标签: java spring rest pagination jackson