获取字符串/json 形式的请求正文,以使用 json 模式 - Spring boot REST API 进行验证



我正在尝试验证JSON(由客户端作为请求正文传递(,然后再将其转换为控制器方法中的模型。

如果验证通过,则不返回任何内容,让该过程继续原样(Spring boot 将 JSON 转换为标记为 @RequestBody 的模型(。在验证失败的情况下抛出错误(everit-org/json-schema(。

我尝试了两种方式:

  1. 实现HandlerMethodArgumentResolver,但resolveArgument()没有提供请求正文详细信息,因为它已经读取并存储在ContentCachingRequestWrapper中。

    注意:ContentCachingRequestWrapper中的inputStream没有任何请求正文详细信息。

  2. 使用弹簧Interceptor.但这并不能帮助我找到请求中传递的请求正文类型。因为每个请求的 JSON 架构都不同。

我可以尝试其他方法吗?

我无法添加评论...所以。。。

您需要什么样的验证?如果您只想验证字符串长度或数字范围等字段。我建议您在控制器 mehtod 参数和型号上使用@Validated

@NotNull
@Size(min = 32, max = 32)
private String id;

控制器:

@PatchMapping
public Object update(@RequestBody @Validated User user, Errors errors) {
...
}

如果有什么问题,errors.hasErrors()会返回true.

编辑:

好的,我在过滤器中做了一些测试:

HttpServletRequest httpServletRequest = (HttpServletRequest)request;
ServletInputStream inputStream = httpServletRequest.getInputStream();
byte[] a = new byte[1024];
inputStream.read(a);
System.out.println(IOUtils.toString(a));

我得到了一个 json 字符串(一段请求正文(:

{"template":"5AF78355A4F0D58E03CE9F55AFA850F8","bd":"" ...

最新更新