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