在多條件查詢的表格場(chǎng)景中,因?yàn)樾枰獋鬟f的參數(shù)較多,@RequestParam
需要更多的代碼量,所以我個(gè)人采用@RequestBody
的方式傳遞
Controller中:
@ResponseBody
@PostMapping("/users")
public Page<User> findAll(@RequestBody QueryParams queryParams) {
return userService.findAll(queryParams);;
}
實(shí)體類:
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 方法省略...
}
// 多重條件選擇對(duì)象
public class Condition {
private String field;
private String comparison;
private String input;
// get set 方法省略...
}
但訪問該請(qǐng)求時(shí),有可能會(huì)出現(xiàn)這樣的錯(cuò)誤:
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]
遇到這種情況,請(qǐng)把使用@RequestBody
的實(shí)體類的全部構(gòu)造參數(shù)刪除,包括其嵌套的實(shí)體類(QueryParams
類中嵌套的 Condition
)。
刪除之后,運(yùn)行正常。