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

时间:2018-10-05 07:49:09

标签: java spring rest

我使用的是REST API的Spring 5,但我不知道如何标记请求参数必需,以便Spring会回复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 个答案:

答案 0 :(得分:0)

您可以使用类似的东西

@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

答案 1 :(得分:0)

您可以使用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