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)。

删除之后,运行正常。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,850评论 19 139
  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架,建立于...
    Hsinwong阅读 22,744评论 1 92
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 47,122评论 6 342
  • (掌声中,罗永浩走到苹果发布会现场) 谢谢大家,请坐! 今天是我们Apple公司的发布会,我和在场的各位一样都很兴...
    缘下杂音阅读 2,454评论 0 1
  • 到底还是哭了,这段时间过得真的不开心,承受了太多的压力。因为专业的认可度不高,想着跨专业工作,却毫无优势。太多的选...
    那時候阅读 1,711评论 0 0

友情链接更多精彩内容