gpt4 book ai didi

java - 如何处理 Spring Boot Rest 和 Jackson Deserializer 的 Javax 验证中的无效数字

转载 作者:行者123 更新时间:2023-12-02 09:08:04 25 4
gpt4 key购买 nike

我有一个 Java Pojo 类,预计为 @RequestBody在我的休息 Controller 中。这个 Java Pojo 类有一个 Integer 字段。

当用户调用 Rest API 并将整数字段值作为垃圾字符串传递时,Jackson 会抛出 InvalidFormatException 。相反,我想使用 Javax Validator 框架注释来处理此错误并显示有意义的错误消息作为响应。不幸的是 Jackson 从 JSON 到 Java 的反序列化发生在 Javax 验证之前,因此我的 @Digits验证永远不会被调用。

注意,@NotNull 被调用,但 @Digits 没有被调用,因为 jackson 在调用到达 Javax 验证层 IMO 之前就失败了请求。

Java Pojo 类:

public class Board implements Serializable{
private static final long serialVersionUID = 1L;


@Digits(message = "quantity must be a number", integer = 8, fraction = 0)
private Integer quantity;

public Integer getQuantity() {
return quantity;
}

public void setQuantity(Integer quantity) {
this.quantity= quantity;
}
}

Controller 类:

@Controller
@RequestMapping("boards")
public class EnrichController {

@Autowired
private BoardService boardService;

@RequestMapping(value = "", method = RequestMethod.PUT, produces = "application/json;charset=UTF-8")
public @ResponseStatus(value = HttpStatus.NO_CONTENT) @ResponseBody void updateBoard(
@RequestBody @Valid Board board) throws IllegalArgumentException, MalformedURLException {
boardService.updateUserBoard(board);
}
}

用户输入:

{
"quantity": "abcdef"
}

如您所见,我正在使用 Javax 验证注释 @Digits & @Valid但没有用,因为 Jackson 反序列化在解析整数字段时失败 quantity

您是否可以通过使用 Javax 验证注释处理此用例来帮助我解决这种情况?我认为将 POJO 类中的字段类型更改为 String 是一项昂贵的工作,因为每次我需要该字段上的一些业务逻辑时,我们都必须进行 String 到 Integer 的转换,因此这对我来说不是一个选择。

最佳答案

在您的情况下,问题是您不符合公开的 REST API,并尝试发送字符串而不是数量字段的数字。您或使用您的 API 的第三方服务绝对不应该发生这种情况。

Is there anyway you can help me to solve this situation by handling this use-case using Javax validation annotations?

无论如何,如果您仍然想解决上述问题,解决方案是更改字符串类型字段中的“数量”并为其添加模式匹配

@Pattern(message = "quantity must be a number", regexp="^[0-9]*$")
private String quantity;

关于java - 如何处理 Spring Boot Rest 和 Jackson Deserializer 的 Javax 验证中的无效数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59643749/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com