【发布时间】:2020-12-27 19:10:01
【问题描述】:
我在 Spring Boot 应用程序中有一个 Pojo(如果有任何区别,则使用 Lombok 进行注释)和一个 RestController。 pojo 方法参数用@Valid 注释,但没有应用验证,即使我添加了 BindingResult 第二个参数,它也不会出现任何错误。我正在使用 Swagger UI 进行测试,发布一个 JSON,但我不明白为什么会有任何不同...我错过了一些明显的东西吗?
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Tolerate;
import org.springframework.data.mongodb.core.mapping.Document;
import javax.validation.constraints.NotBlank;
@Data
@EqualsAndHashCode(callSuper = true)
@Builder
public class MyPojo extends GenericDocument {
@NotBlank
private String name;
@Tolerate
public MyPojo() {
}
}
import javax.validation.Valid;
@RestController
@RequestMapping(value = "/myUrl", produces = APPLICATION_JSON_VALUE)
public class MyController {
@PostMapping
public ResponseEntity<MyPojo> createNew(@RequestBody @Valid MyPojo pojo){...
}
}
解决方案 添加这个依赖就足够了:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
奇怪的是,尽管有documentation,但添加javax.validation:validation-api 和org.hibernate:hibernate-validator 是不够的
【问题讨论】:
-
不确定它是否会有所帮助,但我到目前为止看到的
@Valid的用法就像@Valid @RequestBody MyPojo pojo而不是@RequestBody @Valid MyPojo pojo。你可以试试这个吗? -
如果你应用@Damodar Hegde 的建议,那么我有相同的配置,它对我有用。我只想删除 lombok 注释,尤其是这个实验性的。然后在我的情况下它工作得很好
标签: spring spring-boot lombok