【问题标题】:JSON String considering without Quotes values valid in Spring boot ,Java 8JSON字符串考虑没有引号值在Spring boot,Java 8中有效
【发布时间】:2021-05-21 11:54:33
【问题描述】:

我正在使用 javax 注释验证 json 字符串到 bean 的转换,我正在使用 javax.validation.Validator 接口,在类中,我已将属性标记为字符串

@NotBlank(message ="User name cannot be null")
private String userName;

我希望值会出现在双引号中。喜欢 {"userName" : "my name"}。

但是,如果我将值传递为 {"userName" : 1234567889} 就会出现问题,验证器会认为这是一个有效值。有没有办法限制所有这些值,或者是否有一个所有案例都被认为是坏 Json 和哪些不是的列表。任何参考都会有所帮助。

编辑1:可能是很多解释造成了混乱,让我简单地说,我希望只有在双引号中的值才能被接受,比如 {"key" : "value" } 否则违反了约束。

【问题讨论】:

  • "1234567889" 不是有效名称吗?我同意,如果该值实际上不是 String 时会被拒绝,但当前值被接受时实际上存在问题吗?
  • 如果这是 0123456789,它会被拒绝为 JsonParseException。问题是我找不到所有这些规则的违反会导致 JsonParseException。感谢@luk2302 的回复。
  • 啊,所以 javax 说“没问题”,但实际上解析/转换数据会导致异常?
  • 检查 docs.oracle.com/javaee/7/tutorial/bean-validation001.htm 你可以使用 @Pattern 和 String only 表达式添加验证

标签: java json spring-boot bean-validation


【解决方案1】:

你可以使用

@Pattern(regexp="<your regular expression>",message="<message>")

来自 javax.validation.constraints

的注解

例子,

@Pattern(regexp="^[a-zA-Z]{4,10}",message="Invalid username")
private String userName;

以上将接受 4 到 10 个字符的用户名

【讨论】:

  • 感谢@Sam 的回复,我更感兴趣的是阻止字符串属性接受未引用的值。
  • @VatsalyaSaxena - 从未引用的值中,您的意思是数字/布尔值,对吗?但是您是否有要求,例如您的用户名可以包含数字或可以是字符串格式的数字?
  • 可以是任何东西,我可以稍后验证它,它必须在引号内
猜你喜欢
  • 2013-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-23
  • 2022-01-19
  • 2021-11-11
  • 2020-09-22
  • 2019-08-26
相关资源
最近更新 更多