代码之家  ›  专栏  ›  技术社区  ›  watery

如何在Spring Rest MVC中强制要求bean请求参数?

  •  2
  • watery  · 技术社区  · 6 年前

    我使用Spring 5作为REST API,我无法获得如何标记请求参数 必修的 让春天来回应 400 Bad request 而不是让请求到达控制器方法。

    我的方法使用bean来接收查询字符串参数,因此 @RequestParam(required=true) 在这里不是一个选项:

    @GetMapping(path="")
    public String findAll(Filter filter) {
        // ...
    }
    

    一个 Filter 看起来像这样:

    public class Filter {
    
        private String id;
    
        private String usersId;
    
        private GregorianCalendar dayStart;
    
        private GregorianCalendar dayEnd;
    
        // ...
    
    }
    

    我想要求 usersId 是强制性的。

    有没有类似的东西,或者我应该手动验证输入?

    2 回复  |  直到 6 年前
        1
  •  0
  •   user10367961user10367961    6 年前

    你可以用这样的东西

    @GetMapping(path="")
    public String findAll(@Valid Filter filter) {
        // ...
    }
    

    在你的 Filter

    public class Filter {
    
        private String id;
        @NotNull
        private String usersId;
        private GregorianCalendar dayStart;
        private GregorianCalendar dayEnd;
    
        // ...
    
    }
    

    你也应该确保

    • 已启用验证
    • 您的bean是以应用验证规则的方式实例化的
        2
  •  0
  •   Sudhir Ojha    6 年前

    您可以使用 javax.validation.Valid 验证bean,而不是使用 @GetMapping 你可以用 @PostMapping .

    @PostMapping(path="")
    public String findAll(@Valid Filter filter) {
        // ...
    }
    

    在你的 Filter 可以使用的类 @NotNull 属于 javax.validation.constraints.NotNull @NotEmpty 属于 javax.validation.constraints.NotEmpty

    public class Filter {
    
        private String id;
    
        @NotNull
        @NotEmpty
        private String usersId;
    
        private GregorianCalendar dayStart;
    
        private GregorianCalendar dayEnd;
    
        // ...
    }
    

    有关验证的详细信息,请参阅 here