Spring REST - 验证原始 GET 请求参数
Spring REST - validating primitive GET request parameters
有没有一种方法可以使用注释来验证原始(int、String 等)GET 参数?
@RequestMapping(value = "/api/{someInt}",
method = RequestMethod.GET,
produces = MediaType.TEXT_PLAIN_VALUE)
public ResponseEntity<String> someRestApiMethod(
@PathVariable
@Valid @Min(0) @Digits(integer=10, fraction=0)
int someInt) {
//...
return new ResponseEntity<String>("sample:"+someInt, HttpStatus.OK);
}
如你所见,我已经添加了一堆注释来验证 someInt 是一个 10 位的正整数,但它仍然接受各种整数。
根据 JSR 303,这是不可能的。详情见this
是的,这是可能的。
给定以下控制器:
@RestController
@Validated
public class ValidatingController {
@RequestMapping("/{id}")
public int validatedPath(@PathVariable("id") @Max(9) int id) {
return id;
}
@ExceptionHandler
public String constraintViolationHandler(ConstraintViolationException ex) {
return ex.getConstraintViolations().iterator().next()
.getMessage();
}
}
和一个 MethodValidationPostProcessor
在您的上下文中注册如下(或 XML 等效项,并且 Spring Boot web starter 不需要 - 它会为您执行此操作):
@Bean
public MethodValidationPostProcessor methodValidationPostProcessor() {
return new MethodValidationPostProcessor();
}
假设您的调度程序 servlet 映射到 http://localhost:8080/
:
- 访问
http://localhost:8080/9
得到 9
- 访问
http://localhost:8080/10
得到 must be less than or equal to 9
看起来 moves are afoot 在 Spring 的未来版本中将此 easier/more 设为自动。
有没有一种方法可以使用注释来验证原始(int、String 等)GET 参数?
@RequestMapping(value = "/api/{someInt}",
method = RequestMethod.GET,
produces = MediaType.TEXT_PLAIN_VALUE)
public ResponseEntity<String> someRestApiMethod(
@PathVariable
@Valid @Min(0) @Digits(integer=10, fraction=0)
int someInt) {
//...
return new ResponseEntity<String>("sample:"+someInt, HttpStatus.OK);
}
如你所见,我已经添加了一堆注释来验证 someInt 是一个 10 位的正整数,但它仍然接受各种整数。
根据 JSR 303,这是不可能的。详情见this
是的,这是可能的。
给定以下控制器:
@RestController
@Validated
public class ValidatingController {
@RequestMapping("/{id}")
public int validatedPath(@PathVariable("id") @Max(9) int id) {
return id;
}
@ExceptionHandler
public String constraintViolationHandler(ConstraintViolationException ex) {
return ex.getConstraintViolations().iterator().next()
.getMessage();
}
}
和一个 MethodValidationPostProcessor
在您的上下文中注册如下(或 XML 等效项,并且 Spring Boot web starter 不需要 - 它会为您执行此操作):
@Bean
public MethodValidationPostProcessor methodValidationPostProcessor() {
return new MethodValidationPostProcessor();
}
假设您的调度程序 servlet 映射到 http://localhost:8080/
:
- 访问
http://localhost:8080/9
得到9
- 访问
http://localhost:8080/10
得到must be less than or equal to 9
看起来 moves are afoot 在 Spring 的未来版本中将此 easier/more 设为自动。