【问题标题】:Avoid fractional values in int fields in spring boot在 Spring Boot 中避免 int 字段中的小数值
【发布时间】:2020-05-14 08:03:02
【问题描述】:

这里是控制器方法:

@PostMapping(value = "/template")
ResponseEntity<Object> createtemplate(@Valid @RequestBody Template template) {
        return templateService.createCsvTemplate(template);
    }

对象类:

@Getter
@Setter
public class Template {  
    @Min(value = 1, message = "Please provide a valid ID, must be greater than 0")
    private int id;
}

当用户像这样插入 POST 正文时:

{
"id": 5.5
}

应用程序将此值作为 5 并接受它。我想避免接受分数并引发错误。

【问题讨论】:

    标签: java spring-boot rest validation


    【解决方案1】:

    默认情况下,jackson 将十进制值序列化为整数,因为ACCEPT_FLOAT_AS_INT 标志默认为真。将 ACCEPT_FLOAT_AS_INT 设置为 false 应该可以解决您的问题。并且您还需要处理抛出异常。

    ObjectMapper.configure(DESERIALIZATION_FEATURE.ACCEPT_FLOAT_AS_INT, false);
    

    你可以这样设置配置

    @Configuration
    public class JacksonConfig {
    
      @Bean
      @Primary
      public ObjectMapper configureObjectMapper() {
        ObjectMapper mapper = new ObjectMapper();
        mapper.configure(DESERIALIZATION_FEATURE.ACCEPT_FLOAT_AS_INT, false);
        return mapper;
      }
    
    }
    

    【讨论】:

    • 感谢您的回答。你能告诉我应该在哪里处理抛出异常吗?这是我的二传手类吗?
    • 您可以在您的应用程序中使用注解@ExceptionHandler(Your exception class)的特定异常处理程序方法处理全局异常处理程序
    猜你喜欢
    • 1970-01-01
    • 2018-12-20
    • 1970-01-01
    • 2019-04-30
    • 2022-01-15
    • 1970-01-01
    • 2013-03-27
    • 2019-10-06
    • 1970-01-01
    相关资源
    最近更新 更多