Spring boot 複雜參數傳遞 @RequestBody

在多條件查詢的表格場景中,因爲需要傳遞的參數較多,@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)。

刪除之後,運行正常。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章