java - 使Spring java对象请求参数成为必需

标签 java spring spring-boot http-request-parameters

我有以下 Controller 代码

@GetMapping("/users")
public ResponseEntity<UserDto> getUsers(Filter filter) {
    return ResponseEntity.ok(userService.findUsers(filter));
}

过滤器.java:

public class Filter {
    private Integer page;

    private Integer size;

    private String sort;

    ... lots of other parameters
}

请求参数写成Java对象,避免给controller增加很多参数。但是,Spring 将所有参数设为可选。我想要的是有一些参数,如 pagesize 是必需的,但其他参数如 sort 是可选的。如果我将它们作为 Controller 参数,我可以使用 @RequestParam(required = true/false)。是否可以在 Java 类中做类似的事情?

最佳答案

您可以使用 javax.validation API 对类的字段指定一些约束。
在您的情况下,您可以使用 @NotNull@NotEmpty根据您的要求和字段类型,例如:

import javax.validation.constraints.NotNull;
import javax.validation.constraints.NotEmpty;
...

public class Filter {

    @NotNull
    private Integer page;

    @NotEmpty
    private Integer size;

    private String sort;

    ... lots of other parameters
}

然后指定 @Valid您要验证的参数的注释:

import javax.validation.Valid;
...
@GetMapping("/users")
public ResponseEntity<UserDto> getUsers(@Valid Filter filter) {
    return ResponseEntity.ok(userService.findUsers(filter));
}

如果过滤器参数不遵守约束,则 ConstraintViolationException抛出您可以离开或捕获以使用 Spring 异常处理程序(例如 @ControllerAdvice)将其映射到特定的客户端 4XX 错误.

关于java - 使Spring java对象请求参数成为必需,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50100193/

相关文章:

java - 循环内的变量声明

java - 通过java代码将文件放入jre bin中

java - Axon - 事件处理程序拦截器配置

java - 多模块maven项目: Failed to execute goal on project,无法解析项目的依赖关系,无法找到 Artifact

java - Spring MongoTemplate - 通过正则表达式在集合中查找

java - 使用多线程构建文件数据时出现额外字节

java - PrimeFaces 5.1 filterFunction - 是否可以从表中获取整行?

java - 基于配置属性中的集合是否为空的 Spring Boot 条件

spring-mvc - 在 Spring Boot 1.4 中测试 Spring MVC 切片时出现问题

java - 如何为每个用户创建一个ThreadPoolExecutor?