java - Spring REST - 验证原始 GET 请求参数

标签 java spring spring-rest spring-validator

有没有一种方法可以使用注释来验证原始(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 位正整数,但它仍然接受各种整数。

最佳答案

是的,这是可能的。

给定以下 Controller :

@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 得到 必须小于或等于 9

看起来像moves are afoot在未来的 Spring 版本中使这更容易/更自动化。

关于java - Spring REST - 验证原始 GET 请求参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34160011/

相关文章:

spring-boot - 用于搜索 API 的 Spring Boot REST 设计

java - 不需要命令行参数的程序是否需要 String args[] 参数?

java - Solr Suggester - 不区分大小写

java - Spring MVC Controller 由于找不到模型属性而测试通过

spring - 为什么我的集成测试提示 Spring Boot 中缺少 RestTemplate 接线?

java - 当 Spring RestTemplate 抛出 org.springframework.web.client.HttpStatusCodeException 时

java - 如何使用 MYSQL 将插入的值更改为大写

Java Swing - JSlider 和 JCombobox 导致运行时错误

java - 是否可以通过 bean 设置 Spring Boot 应用程序的属性?

java - 无法在Maven项目中加载JDBC驱动程序类[com.microsoft.sqlserver.jdbc.SQLServerDriver]