springboot+swagger项目中,controller引入@NotEmpty等校验注解的问题

springboot项目

springboot+swagger项目中,controller层如果使用对基本数据类型使用 @NotEmpty @Length 等校验注解,controller会获取不到值,加了@RequestBody后可以获取到了,但是前端传值content-type必须是text/plain。所以建议control而用VO类接收参数,而不是用基本数据类型接收参数。

但ssm项目是没有这个问题的

以下都是controller层

不加@NotEmpty,可以接收到参数

    @PostMapping("find1")
    @ResponseBody
    public JsonResult find1(String userId) {
        return JsonResult.ok(userId);
    }

加@NotEmpty后接收不到参数

    @PostMapping("find2")
    @ResponseBody
    public JsonResult find2(@NotEmpty(message = "userId不能为空") String userId) {
        return JsonResult.ok(userId);
    }

@RequestBody @NotEmpty 可以接收到参数

但是与前端调试发现,前端发送请求的content-type 必须是 text/plain才可以。

    @PostMapping("find3")
    @ResponseBody
    public JsonResult find3(@RequestBody @NotEmpty(message = "userId不能为空") String userId) {
        return JsonResult.ok(userId);
    }

@NotEmpty(message = "userId不能为空") @RequestParam(value = "userId", required = false) 可以接收到参数

因为@RequestParam(“”)默认必传参数,没传的话,swagger就不会继续走下去。也就走不到@NotEmpty校验。

    @PostMapping("find4")
    @ResponseBody
    public JsonResult find4(@NotEmpty(message = "userId不能为空") @RequestParam(value = "userId", required = false) String userId) {
        return JsonResult.ok(userId);
    }

ssm项目

ssm项目就没这个问题。

    @PostMapping("find4")
    @ResponseBody
    public JsonResult find4(@NotEmpty(message = "userId不能为空") @RequestParam(value = "userId", required = false) String userId) {
        return JsonResult.ok(userId);
    }

看swagger发现,还是form表单提交,而不是application/json

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java,@Valid和@NotEmpty是用于数据校验注解。@Valid注解用于标记需要进行数据校验的对象,而@NotEmpty注解用于标记字段不能为。 如果在使用@Valid和@NotEmpty注解时发现不生效,可能有以下几个原因: 1. 未引入相关依赖:在使用数据校验注解时,需要引入相关的依赖包。在Java,常用的数据校验框架是Hibernate Validator,因此需要引入相关的依赖,例如在Maven项目可以添加以下依赖: ```xml <dependency> <groupId>org.hibernate.validator</groupId> <artifactId>hibernate-validator</artifactId> <version>6.2.0.Final</version> </dependency> ``` 2. 未配置校验器:在使用@Valid注解时,需要配置校验器。可以通过在Spring Boot项目添加以下配置来启用校验器: ```java @Configuration public class ValidationConfig { @Bean public Validator validator() { return Validation.buildDefaultValidatorFactory().getValidator(); } } ``` 3. 未开启校验功能:在使用@Valid注解时,需要确保校验功能已经开启。可以通过在Controller类或方法上添加@Validated注解来开启校验功能: ```java @RestController @Validated public class UserController { @PostMapping("/user") public void addUser(@Valid @RequestBody User user) { // 处理用户添加逻辑 } } ``` 如果以上步骤都已正确配置,但仍然发现@Valid和@NotEmpty注解不生效,可能是因为其他原因导致的。可以提供更多的代码或错误信息,以便更好地帮助您解决问题

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值