对于其余请求,验证在 Spring Boot 中不起作用
Posted
技术标签:
【中文标题】对于其余请求,验证在 Spring Boot 中不起作用【英文标题】:Validation is not working in Spring boot for the rest requests 【发布时间】:2019-02-12 12:01:53 【问题描述】:您好,我一直在尝试通过“JSR-303”验证其余请求的数据 代码如下-:
*pojo 注释级别
@NotNull(message="Carrier ID cannot be null")
private String carrier;
*MessageStatusDoc 类
@Id
private String transactionId;
private String status;
private Key key;
private AccountDetail accountDetail;
*调用方法
saveMessage(@Valid @RequestBody MessageStatusDoc messageStatusDoc)
关键类包含运营商字段
任何人都可以建议为什么我无法捕捉到错误..?
PS 当我尝试记录它时,该值在控制台上打印为 null ..
【问题讨论】:
你把Spring的@Validated
注解放到你的Controller上了吗?
是的,我做了,但它仍然无法正常工作
【参考方案1】:
您提供的代码看起来不错。尽管您没有提供控制器注释。例如
@PostMapping
public void saveMessage(@Valid @RequestBody MessageStatusDoc messageStatusDoc)
不过一定要加
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
到您的 pom 文件(至少对于 Spring Boot >= 2.3.0)。 这将包括验证 API 以及执行实际验证工作的休眠验证器。
此外,如果在外部包中有注释,请尽量不要混合
<dependency>
<groupId>jakarta.validation</groupId>
<artifactId>jakarta.validation-api</artifactId>
</dependency>
和
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
</dependency>
希望这会有所帮助!
【讨论】:
谢谢小伙子,没有在项目中声明验证,为我节省了一吨!【参考方案2】:如果您在 getter 级别而不是在字段声明级别使用注释,这将得到解决。
【讨论】:
【参考方案3】:这是一个例子。
我假设下面的类是你的 MessageStatusDoc。
运营商字段是您需要验证的。
public class MessageStatusDoc
@Id
private String transactionId;
private String status;
private Key key;
@NotNull(message="Carrier ID cannot be null")
private String carrier;
//getter setter
这里是使用 MessageStatusDoc 作为参数的方法
public void saveMessage(@Valid @RequestBody MessageStatusDoc messageStatusDoc)
//nothing to do for now
如果你按照给定的例子做得很好,那么如果任何方法调用了 saveMessage 方法但 messageStatusDoc 参数的载体字段为空,那么验证将抛出异常。
然后结束。我有个问题。 可以给个全部代码吗?
【讨论】:
以上是关于对于其余请求,验证在 Spring Boot 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
如何在请求正文 Spring Boot Rest Controller 中指定订单验证
基本身份验证在Spring-Boot WS Soap服务中不起作用
在 Spring Boot 中使用 JWT 进行简单的身份验证
服务器端验证似乎在 Spring Boot 2.3.1.RELEASE 中不起作用