当前位置: 首页 > 知识库问答 >
问题:

以string/json的形式获取请求体,以便用json模式- Spring boot REST API进行验证

方季同
2023-03-14

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

如果验证通过,则不返回任何内容,让该过程按原样继续(Spring启动将JSON转换为标记为@Request estBody的模型)。如果验证失败,则抛出错误(everit-org/json-Schema)。

我试着想了两个办法:

>

  • 实现HandlerMethodArgumentResolver,但resolveArgument()不提供请求体详细信息,因为它已被读取并存储ContentCachingRequestWrapper

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

    使用spring 拦截器。但是这并不能帮助我找到请求中传递的请求体类型。因为每个请求的JSON模式是不同的。

    我可以尝试其他方法吗?

  • 共有1个答案

    融烨磊
    2023-03-14

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

    你需要什么样的确认?如果您只想验证字符串长度或数字范围等字段。我建议您对控制器方法参数和型号使用< code>@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":"" ...
    
     类似资料:
    • 问题内容: 是否可以在表单类中获取request.user数据?我想清理一个电子邮件地址以确保它是唯一的,但是如果它是当前用户的电子邮件地址,则它应该通过。 这是我目前拥有的东西,非常适合创建新用户,但是如果我要编辑用户,则会遇到他们的电子邮件无法验证的问题,因为它已经被采用。如果我可以使用request.user.email检查这是他们的电子邮件,则可以解决我的问题,但是我不确定该怎么做。 问题

    • 问题内容: 是否有任何PHP库可根据JSON模式验证JSON对象? 问题答案: 关于jsonschemaphpv,尽管它维护得不是很好,但是我们经常使用它并且可以正常工作。这是js验证程序的端口。它具有针对php和http://code.google.com/p/jsonschema/的完整测试套件。 猜猜是什么…它比js传递了更多的测试。至少在最后一次运行测试时。问题是该项目的结构不是很好,而且

    • 问题内容: 我正在为返回JSON对象的Java Web应用程序编写一些验收测试。我想验证返回的JSON是否针对架构进行了验证。有人可以为此建议任何工具吗? 问题答案: 该 JSON工具项目 (程序员指南)包括验证使用JSON模式的JSON文件的内容的工具。 另一种选择是使用Rhino验证运行(JavaScript) JSON Schema Validator 。

    • 我试图使用另一个JSON模式来验证JSON模式。 要验证的JSON模式示例:https://jsonschema.net/home 验证上述模式的验证模式参考:https://github.com/ajv-validator/ajv/blob/master/lib/refs/json-schema-draft-07.json 从上面的中,如果我删除,我的JSON将变得无效。 我有什么方法可以定义根

    • 我需要在get请求中以JSON格式获取数据,数据应为以下格式: 但数据以以下形式返回,响应为字符串: 代码: 如何使用Rest Assured在get请求中获取JSON格式?

    • 问题内容: data = { ‘ids’: [12, 3, 4, 5, 6 , …] } urllib2.urlopen("http://abc.com/api/posts/create”,urllib.urlencode(data)) 我想发送POST请求,但是其中一个字段应该是数字列表。我怎样才能做到这一点 ?(JSON?) 问题答案: 如果您的服务器期望POST请求为json,则您需要添加标