在多條件查詢的表格場景中,因爲需要傳遞的參數較多,@RequestParam
需要更多的代碼量,所以我個人採用@RequestBody
的方式傳遞
Controller中:
@ResponseBody
@PostMapping("/users")
public Page<User> findAll(@RequestBody QueryParams queryParams) {
return userService.findAll(queryParams);;
}
實體類:
public class QueryParams {
private int pageSize = 0;
private int pageNumber = 15;
private String searchText = "";
private String sortName = "date";
private String sortOrder = "desc";
private List<Condition> conditions = Collections.emptyList();
// get set 方法省略...
}
// 多重條件選擇對象
public class Condition {
private String field;
private String comparison;
private String input;
// get set 方法省略...
}
但訪問該請求時,有可能會出現這樣的錯誤:
com.fasterxml.jackson.databind.exc.InvalidDefinitionException:
Cannot construct instance of `com.xxx.domain.QueryParams`
(no Creators, like default construct, exist):
cannot deserialize from Object value (no delegate- or property-based Creator)
at [Source: (PushbackInputStream); line: 1, column: 2]
遇到這種情況,請把使用@RequestBody
的實體類的全部構造參數刪除,包括其嵌套的實體類(QueryParams
類中嵌套的 Condition
)。
刪除之後,運行正常。