有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!


共 (2) 个答案

  1. # 1 楼答案

    要实现这一目标,你可以这样做

    波乔班

    class PojoClass {
    
        @Getter
        @Setter
        @Max(10)
        @Min(1)
        private int data;
    
    }
    

    控制器

    @GetMapping(value = "/test")
    public void test(@Valid @NotNull @RequestBody PojoClass pojo){
    
    }
    

    现在,以下场景起作用了

    案例1:有效主体

    {
        "data" : 1
    }
    

    案例2:有效主体

    {
        "data" : "1"
    }
    

    这是因为字符串可以转换为整数,所以在内部由jackson为您转换

    以下情况将失败

    案例1:输入不在范围内 { “数据”:11 }

    案例2:字符串不能反序列化为整数,即带有字母等的字符串 { “数据”:“1a” }

    本例中的错误

    Caused by: com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type int from String "abc": not a valid Integer value


    编辑:

    根据注释,如果您需要自定义消息,您可以获得控制器建议,并以如下类似的方式重写该方法,请注意,这将适用于用户输入与POJO类不匹配的所有位置

    @Override
    protected ResponseEntity<Object> handleHttpMessageNotReadable(HttpMessageNotReadableException ex,
                                                                  HttpHeaders headers, HttpStatus status,
                                                                  WebRequest request) {
        return new ResponseEntity<>("Input is not in expected format", HttpStatus.BAD_REQUEST);
    }
    
  2. # 2 楼答案

    一,。在src目录下创建一个子目录,名称为:resources

    1. 右键单击resources子目录并创建一个名为messages的新文件。性质

    2. 将以下条目添加到消息中。属性文件

      类型不匹配yourAttributeNameFromControlleryourFieldName=yourCustomErrorMessage

    3. 保存文件

    4. 在配置文件中添加以下内容:WEB-INF/yourServletName。xml

    <bean id="messageSource"  
     class="org.springframework.context.support.ResourceBundleMessageSource">
       <property name="basenames" value="resources/messages" />
    </bean>"
    

    验证完成:D