【问题标题】:Spring Rest : pass an object in RequestParamSpring Rest:在 RequestParam 中传递一个对象
【发布时间】:2021-12-10 23:00:02
【问题描述】:

我想通过@RequestParam 传递我的请求中的对象列表,但它不起作用。
如果我这样做:

 public List<Affaire> getAllAffaires(
                 @RequestParam(value = "consultantId", required = false) Long consultantId,
                 @RequestParam(value = "filtres", required = false) List<FilterDTO> filtres)

它没有进入方法,我得到一个 500 错误。
如果我这样做:

 public List<Affaire> getAllAffaires(
                 @RequestParam(value = "consultantId", required = false) Long consultantId,
                 List<FilterDTO> filtres)

我得到一个:

Unable to evaluate the expression Method threw 'java.lang.IllegalArgumentException' exception.

如果我传递另一个包含列表的对象:

 public List<Affaire> getAllAffaires(
                 @RequestParam(value = "consultantId", required = false) Long consultantId,
                 FilterDTOList filtres)

我进入方法但是FilterDTOList的属性listFiltre总是为空。

在前端(AngularJS)中,调用是:

function Affaire ($resource, DateUtils) {
        var resourceUrl =  'api/affaires/:id';

        return $resource(resourceUrl, {}, {
            'query': { method: 'GET', isArray: true,
                params:{
                    consultantId:'@consultantId',
                    filtres:'@filtres'
                },

如何将我的列表作为请求的参数传递?

【问题讨论】:

  • 用户 @RequestBody FilterDTOList filtres 并在请求正文中传递过滤器。
  • 您能提供更多信息吗?您如何处理对服务的请求?您使用的是哪个 HTTP 动词?
  • 第一个例子中抛出 500 时能否提供堆栈跟踪?看起来没有为 FilterDTO 定义映射。可能,如果您将请求参数注入 List,然后从 String 映射到 FilterDTO,它会起作用,但如果没有额外的上下文就很难判断
  • 没有stacktrace,好像连java方法都没进去。

标签: java spring


【解决方案1】:

尝试使用数组而不是列表,然后将该数组转换为列表

    @PostMapping(value = "/updateAllAffaires")
    @ResponseBody
    public List<FilterDTO> getSelectedGenes(@RequestParam(value = "consultantId", required = false) Long consultantId,
                                            @RequestBody FilterDTO[] filtersDto) {
        List<FilterDTO> filters = new ArrayList<>();
        // here you can use the logic to convert array to list
        return filters;
    }

【讨论】:

    【解决方案2】:

    尝试使用@ModelAttribute 或@Requestbody 代替@RequestParam。

    public List<Affaire> getAllAffaires(
                 @RequestParam(value = "consultantId", required = false) Long consultantId,
                 @ModelAttribute(value = "filtres", required = false) List<FilterDTO> filtres)
    

    您可以阅读this 答案以获得更好的理解。 This 也会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-16
      • 1970-01-01
      • 1970-01-01
      • 2014-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-13
      相关资源
      最近更新 更多