【问题标题】:Spring MVC Binding Request parameters to POJO fieldsSpring MVC 绑定请求参数到 POJO 字段
【发布时间】:2017-04-19 16:40:41
【问题描述】:

我想要一个具有以下映射的控制器(不完整):

@GetMapping(/searchitems)
public @ResponseBody Page<Item> get(Item probe)

Item probe 参数我想query by example 在项目的存储库中并返回结果。

问题:

如何为搜索 URL 完成上述映射?作为搜索 URL,我在想/searchitems?itemAttributeA=foo&amp;itemAttributeB=bar&amp;...itemAttributeZ=xyz 之类的东西。如何告诉spring将传递的请求参数注入Item probe同名字段?

【问题讨论】:

    标签: java spring spring-mvc query-by-example


    【解决方案1】:

    添加 @ModelAttribute 应该将各个请求参数绑定到您的 Item POJO。

    public @ResponseBody Page<Item> get(@ModelAttribute Item probe)
    

    【讨论】:

    • 我想添加一个后续。 Spring有RestController的概念,如果你使用这个注解代替Controller,你可以从你的方法签名中去掉ResponseBody注解
    【解决方案2】:

    您可以创建一个 POJO 并在控制器类中作为参数传递。 Pojo 应该有你想要读取和设置的字段。 Spring 将读取并映射 Pojo 中您将定义为请求的那些属性。

     @GetMapping(/searchitems)
     public ResponseEntity<List<Items>> searchItems(ItemRequest       itemRequest) {
     }
    

    唯一需要注意的是检查绑定结果。如果有错误,我们需要停止请求并处理或抛出。

    例如URL 中的以下所有属性都将在 Pojo 中设置。

    https://domain/search-items?pageNumber=1&sortOrder=ascending&itemName=test&itemType=apparel&sortField=itemId&pageSize=5

    【讨论】:

      【解决方案3】:

      您可以为此使用@RequestParam

      public @ResponseBody Page<Item> get(@RequestParam("itemAttributeA") String itemAttributeA , 
                                          @RequestParam("itemAttributeB") String itemAttributeB,...)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-25
        • 1970-01-01
        • 1970-01-01
        • 2013-02-08
        • 1970-01-01
        • 2016-04-28
        相关资源
        最近更新 更多