V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Simle100
V2EX  ›  Java

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

  •  
  •   Simle100 · 2020-04-23 16:03:31 +08:00 · 2426 次点击
    这是一个创建于 1708 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    7 条回复    2020-04-25 15:57:43 +08:00
    liyanggyang
        1
    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
        2
    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
        3
    Simle100  
    OP
       2020-04-23 16:43:56 +08:00
    @liyanggyang @heyjei 谢谢。
    ourslay
        4
    ourslay  
       2020-04-23 16:55:38 +08:00
    royan
        5
    royan  
       2020-04-23 18:06:14 +08:00
    @RequestParam 验证十分不方便,如果可以尽量使用 @RequestBody
    参考: https://www.jianshu.com/p/51e8d2702ca1
    Simle100
        6
    Simle100  
    OP
       2020-04-24 08:40:24 +08:00
    @ourslay @royan 感谢。
    Valid
        7
    Valid  
       2020-04-25 15:57:43 +08:00
    好像有人 @我
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1035 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 20:21 · PVG 04:21 · LAX 12:21 · JFK 15:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.