spring 的 @RequestParam 注解如何做到类型验证?

2020-04-23 16:03:31 +08:00
 Simle100

如果一个 controller 的某个方法的参数 status 用 @RequestParam 进行控制:

@RequestParam(value = "status", required=true) Integer status.

如果前端传了一个 0.01 过来,因为类型转换失败,系统会提示"参数类型错误:status",那么我们怎么样修改这个错误提示为:"status 必须为整型。"

2423 次点击
所在节点    Java
7 条回复
liyanggyang
2020-04-23 16:13:01 +08:00
1. 自定义一个注解如 NumberValid
@Target({FIELD, METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = JsonStringValidator.class)
public @interface NumberValid {

String message() default "JSON format required.";

Class<?>[] groups() default { };

Class<? extends Payload>[] payload() default { };

}

2. 配置校验规则
public class TextValidator implements ConstraintValidator<NumberValid, String> {
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
//自己写校验 return
}
}

3. @RequestParam @Valid @NumberValid(message="必须数值")
heyjei
2020-04-23 16:18:30 +08:00
public void post(@RequestBody @Valid PostRequest postRequest
, HttpServletRequest request) throws Exception {


@Data
static class PostRequest {
@Positive(message = "提示内容") private int id;
}
Simle100
2020-04-23 16:43:56 +08:00
@liyanggyang @heyjei 谢谢。
ourslay
2020-04-23 16:55:38 +08:00
royan
2020-04-23 18:06:14 +08:00
@RequestParam 验证十分不方便,如果可以尽量使用 @RequestBody
参考: https://www.jianshu.com/p/51e8d2702ca1
Simle100
2020-04-24 08:40:24 +08:00
@ourslay @royan 感谢。
Valid
2020-04-25 15:57:43 +08:00
好像有人 @我

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/665374

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX