在我的Spring项目中,我有一个POJO类,该类具有CMYK颜色的属性。 我希望此属性由具有4个浮点数的JSON数组表示。 每个数字必须在0.0到1.0之间。 目前,我正在努力验证此属性。

我已经进行了研究,发现@DecimalMin和@DecimalMax批注不能在Float或float (请参阅此问题的答案)。 因此,我已经放弃了List并改用List 。

这是我精简的POJO类:

public class Settings {

@NotNull

@Size(min = 4, max = 4)

@DecimalMin("0")

@DecimalMax("1")

private List cmykColor;

public List getCmykColor() {

return cmykColor;

}

public void setCmykColor(List cmykColor) {

this.cmykColor = cmykColor;

}

}

这里是JUnit测试:

@RunWith(SpringRunner.class)

@SpringBootTest

public class SettingsTest extends Assert {

@Autowired

private ObjectMapper objectMapper;

@Autowired

private Validator validator; // from org.springframework.validation

private Errors validate(String json) throws IOException {

Settings settings = objectMapper.readValue(json, Settings.class);

Errors errors = new BeanPropertyBindingResult(settings, "settings");

validator.validate(settings, errors);

return errors;

}

@Test

public void testValid() throws IOException {

String json = "{ \"cmykColor\": [0.5, 1.0, 0.3, 0.0] }";

Errors errors = validate(json);

assertEquals(0, errors.getErrorCount());

}

@Test

public void testTooBig() throws IOException {

String json = "{ \"cmykColor\": [0.5, 1.01, 0.3, 0.0] }";

Errors errors = validate(json);

assertEquals(1, errors.getErrorCount());

}

@Test

public void testTooMany() throws IOException {

String json = "{ \"cmykColor\": [0.5, 1.0, 0.3, 0.0, 0.0] }";

Errors errors = validate(json);

assertEquals(1, errors.getErrorCount());

assertNotNull(errors.getFieldError("cmykColor"));

}

}

当我注释掉@DecimalMin("0")和@DecimalMax("1")批注时,所有测试用例均成功,当然testTooBig测试用例除外,后者将依赖于@DecimalMax约束。

但是,当我添加@DecimalMin("0")和@DecimalMax("1")批注时,在所有测试用例上都会出现以下异常,即没有DecimalMax的验证程序来验证List 。

javax.validation.UnexpectedTypeException: HV000030: No validator could be found for constraint 'javax.validation.constraints.DecimalMax' validating type 'java.util.List'. Check configuration for 'cmykColor'

at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.getExceptionForNullValidator(ConstraintTree.java:108)

at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.getInitializedConstraintValidator(ConstraintTree.java:140)

at org.hibernate.validator.internal.engine.constraintvalidation.SimpleConstraintTree.validateConstraints(SimpleConstraintTree.java:55)

at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.validateConstraints(ConstraintTree.java:73)

at org.hibernate.validator.internal.metadata.core.MetaConstraint.doValidateConstraint(MetaConstraint.java:127)

at org.hibernate.validator.internal.metadata.core.MetaConstraint.validateConstraint(MetaConstraint.java:120)

at org.hibernate.validator.internal.engine.ValidatorImpl.validateMetaConstraint(ValidatorImpl.java:533)

at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForSingleDefaultGroupElement(ValidatorImpl.java:496)

at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForDefaultGroup(ValidatorImpl.java:465)

at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForCurrentGroup(ValidatorImpl.java:430)

at org.hibernate.validator.internal.engine.ValidatorImpl.validateInContext(ValidatorImpl.java:380)

at org.hibernate.validator.internal.engine.ValidatorImpl.validate(ValidatorImpl.java:169)

at org.springframework.validation.beanvalidation.SpringValidatorAdapter.validate(SpringValidatorAdapter.java:104)

at com.oce.spring.domain.SettingsTest.validate(SettingsTest.java:29)

at com.oce.spring.domain.SettingsTest.testTooMany(SettingsTest.java:58)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

...

那么,我应该如何在List正确使用@DecimalMin("0")和@DecimalMax("1") ?

java bigdecimal min_java相关推荐

  1. java bigDecimal and double

    Java BigDecimal和double BigDecimal是Java中用来表示任意精确浮点数运算的类,在BigDecimal中,使用unscaledValue × 10-scale来表示一个浮 ...

  2. Java BigDecimal详解

    Java BigDecimal详解 1. BigDecimal概述 2. BigDecimal方法 2.1 BigDecimal常用构造函数 2.2 BigDecimal常用方法详解 3. BigDe ...

  3. Java BigDecimal常用方法

    BigDecimal:计算时,对数据精度要求较高时使用,例如:钱 基础用法: import java.math.BigDecimal;/*** * @title: BigDecimal测试* @aut ...

  4. java BigDecimal实现精确加减乘除运算

    原文:http://blog.csdn.net/shadow_zed/article/details/73522157 import java.math.BigDecimal;/*** 由于Java的 ...

  5. java: BigDecimal 调用add后,求和结果没有变化

    BigDecimal使用add时,原数没有不变. BigDecimal 的 add方法是,调用者不变. 因此,对结果进行接收.改为如下 package com.baobaotao;import jav ...

  6. java bigdecimal语法_JAVA BigDecimal 小数点处理

    语法:// 返回小数点后位数 BigDecimal.setScale(); // setScale len参数指定小数点后位数 BigDecimal.setScale(len); PS: setSca ...

  7. 去掉 java BigDecimal 类对象后面没用的零

    2019独角兽企业重金招聘Python工程师标准>>> 方法一 使用:stripTrailingZeros().toPlainString() import java.util.*; ...

  8. java bigdecimal赋值_Java中BigDecimal类介绍及用法(亲测)

    Java中提供了大数字(超过16位有效位)的操作类,即 java.math.BinInteger 类和 java.math.BigDecimal 类,用于高精度计算. 其中 BigInteger 类是 ...

  9. Java BigDecimal初探

    更新时间:2016-03-17 一.引言 <Effactive Java>中有这样的描述:float和double类型的主要设计目标是为了科学计算和工程计算.他们执行二进制浮点运算,这是为 ...

最新文章

  1. 用matlab读取三角波及其频谱,信号与系统利用MATLAB分析信号频谱作业(第四章)以及结论.doc...
  2. AspNetPager分页控件
  3. c++ 调用cmd命令行函数 可隐藏黑框 四种方法总结
  4. win7远程桌面连接_Windows10远程桌面使用方法
  5. WPF实现聚光灯效果
  6. 大学物理质点动力学思维导图_生理学 | 思维导图
  7. python入门-分类和回归各种初级算法
  8. 数据结构之图的存储结构:邻接矩阵法
  9. reentrantlock原理_分享:synchronized和ReentrantLock的实现原理知识点
  10. 检测手机屏幕是否亮屏解锁
  11. bug-AttributeError: ‘NoneType‘ object has no attribute ‘append‘
  12. 北京二环内详细矢量地图(MapInfo格式)
  13. 02java特性,编译与运行
  14. McAfee迈克菲最新杀毒防火墙软件安装McAfeeEndpointSecurity10.6.1 百度云下载
  15. UI设计中图形设计详解
  16. Thingworx配置mysql的jdbc
  17. C# 自定义动态九宫格键盘,简单实用
  18. 大数据Hadoop集群搭建
  19. 远程匿名聊天_爱还是恨聊天? 远程团队的4个最佳实践
  20. js省市县三级联动效果实例

热门文章

  1. Android中利用ant进行多渠道循环批量打包(一)
  2. Android学习指南 第六讲:用户界面 View(二)
  3. firebug的一个有趣现象
  4. 今天会见广州用友的SALER
  5. TYVJ P2032 「Poetize9」升降梯上 spfa最短路
  6. 06.十分钟学会表达式语言EL
  7. Project Euler Problem 9-Special Pythagorean triplet
  8. fastjson使用中遇到的
  9. 如何打开Tango的ADF文件?
  10. HDU 3938 Portal