首页 > 解决方案 > @RequestParam 上的约束验证似乎不起作用

问题描述

我有一个GetAll操作将所有员工拉到一个deptNo. 我想添加一个约束来检查deptNumber我的大小,RequestParameter但它似乎没有验证参数。我怎样才能实现验证?

    public ResponseEntity<PagedResources<EmpSummary>> getEmps(
@Valid @RequestParam @Max(1) @Max(999) Optional<Long> deptNUmber)

@Controller
@Validated
@RequestMapping("/v1")
@RequiredArgsConstructor
public class OntApiController implements OntApi {
    private final OntService service;
    private NativeWebRequest    nativeWebRequest;
    private HttpServletRequest  httpServletRequest;

    @Override
    public ResponseEntity<PagedResources<OntSummaryResource>> getOnts(
            @Valid @RequestParam @Min(1L) @Max(999L) Optional<Long> ontNumber,
            @Valid @RequestParam @Min(1) @Max(999) Optional<Integer> model,
            ...... more parameters);

javax.validation.UnexpectedTypeException:HV000030:找不到约束“javax.validation.constraints.Max ”验证类型“java.util.Optional”的验证器。检查配置

    <dependency>
        <groupId>org.hibernate.validator</groupId>
        <artifactId>hibernate-validator</artifactId>
    </dependency>

标签: springrestvalidation

解决方案


根据文档@Validated:如果您使用方法参数验证,您应该向控制器添加注释。

现在您的代码将是这样的:

@RestController
@RequestMapping("/your_api")
@Validated
public class YourController {

   @GetMapping("/your_endpoint")
   public ResponseEntity> getEmps(
     @RequestParam @Min(1) @Max(999) Optional deptNUmber){

推荐阅读