【问题标题】:Spring Validating Controller with @Validated使用@Validated 验证控制器
【发布时间】:2018-12-02 06:32:50
【问题描述】:

我有一个像这样的对象:

public class Foo {
  public interface FooValidator{};

  @Null(groups = {FooValidator.class}, message = "Id is null!!!")
  private Integer id;

  @NotEmpty(message = "Description is empty")
  private String description;
}

还有一个像这样的控制器:

public class FooController {
  @PutMapping(value = "/{actionItemId}")
  public ResponseEntity bar1(@Validated({Foo.FooValidator.class}) @RequestBody Foo foo) {
      //stuff
  }

  @PostMapping
  public ResponseEntity bar2(@Validated @RequestBody Foo foo) {
      //stuff
  }
}

我的问题是bar1 方法,它只验证id 字段而不是描述字段。但是bar2 方法工作正常,它正在验证描述字段而不是 id 字段。

如何获取 spring 的 @Validated 注释以验证具有适当接口注释的字段和所有其他正常字段(没有注释的字段。

换句话说,我如何获得bar1 方法来验证iddescription 字段?

【问题讨论】:

    标签: java spring hibernate rest


    【解决方案1】:

    @Validated 注释应该在类级别上使用。据说在类内部执行了一些验证。这意味着它可以与将应用于属性、参数等的其他验证注释一起使用。我发布了来自documentation 的示例:

    @Service
    @Validated
    public class MyBean {
    
        public Archive findByCodeAndAuthor(@Size(min = 8, max = 10) String code,
                Author author) {
            ...
        }
    
    }
    

    如果您想验证自定义类,就像我从示例中看到的那样,您应该改用 @Valid annotation,它将验证应用于类的属性。

    【讨论】:

    • "文档中的示例" 您可以在帖子中添加链接。它会让它变得更好。
    • @davidxxx 已添加。
    • 代码中包含特殊字符怎么办?如果我发送 abc@12345,它将向我发送一个错误。有什么方法可以仅在解码 URL 后进行验证。
    猜你喜欢
    • 2020-11-16
    • 2019-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-25
    • 2015-09-06
    相关资源
    最近更新 更多