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

Swagger API使用json验证使用json

陆伟
2023-03-14

我正在使用Swagger生成Restful API:

@POST
@Consumes({ "application/json" })
@Produces({ "application/json" })
@io.swagger.annotations.ApiOperation(value = "Create a task", notes = "", response = Tasks.class)
@io.swagger.annotations.ApiResponses(value = { 
    @io.swagger.annotations.ApiResponse(code = 200, message = "created task", response = Tasks.class),
    @io.swagger.annotations.ApiResponse(code = 404, message = "task not found", response = Tasks.class),
    @io.swagger.annotations.ApiResponse(code = 200, message = "unexpected error", response = Tasks.class) })
public Response createTask(@ApiParam(value = "The task to create" ,required=true ) NewTask newTask)
throws NotFoundException {
    return delegate.createTask(newTask);
}

这个API接受json字符串并从中生成java对象。这在一个例外情况下运行良好:API接受任何正确格式的json字符串,但忽略json的内容,这意味着我得到一个使用默认值创建的对象。

所以我的问题是:在生成实际的java对象之前,如何验证传入的jsonstring(针对json模式)?

共有2个答案

丁震博
2023-03-14

有swagger-request-validator,它有几个适配器用于各种框架,例如:Spring Web MVC

它能够针对Swagger/OpenAPI 2或OpenAPI 3方案验证请求和/或响应。

参见这里:对照Java中的Swagger定义验证JSON消息以获得更详细的答案。

陆海阳
2023-03-14

由于您不希望在方法中接收JSON字符串,并且Bean验证不是您的验证选项,因此您可以尝试<code>MessageBodyWriter

JAX-RS使用< code>MessageBodyWriter

请参阅以下示例:

@Provider
@Produces("application/json")
public class CustomMessageBodyWriter implements MessageBodyWriter<Object> {

    @Override
    public boolean isWriteable(Class<?> type, Type genericType,
                               Annotation[] annotations, MediaType mediaType) {
        return true;
    }

    @Override
    public long getSize(MyBean myBean, Class<?> type, Type genericType,
                        Annotation[] annotations, MediaType mediaType) {

        // Deprecated by JAX-RS 2.0
        return 0;
    }

    @Override
    public void writeTo(Object object, Class<?> type, Type genericType,
                        Annotation[] annotations, MediaType mediaType,
                        MultivaluedMap<String, Object> httpHeaders,
                        OutputStream entityStream) throws IOException {

        // Read the entityStream
        // Perform the validation against your schema
        // Write to the object
    }
}

@Provider注释使 JAX-RS 运行时在提供程序扫描阶段自动发现该类。

 类似资料:
  • 问题内容: 我正在尝试使用Jackson JSON接受一个字符串,并确定它是否为有效JSON。谁能建议要使用的代码示例(Java)? 问题答案: 不知道您的用例是什么,但是应该这样做:

  • 我正在尝试验证Json Objects。我使用https://code.google.com/p/rest-assured/wiki/Downloads?tm=2, greeter-schema.json:http://cs606926.vk.me/v606926718/15603/0Kauo1bTDi8.jpg 即使JsonString不等于这个“{\”isSuccess\“:false}”,我

  • 我正在以一种特定的格式创建一个JSON文件,所以我想在进一步处理之前验证它是否是这种格式。 这和预期的一样工作,但是只是想检查一下是否有更好更简单的方法来解决这个问题 代码:

  • 问题内容: 是否有任何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响应在我的jmetm使用Beanshell断言。下面是我的代码。 下面是我必须验证的Json路径 运行脚本后,我得到以下脚本。 断言失败消息:org。阿帕奇。乔芬。util。JMeterException:调用bsh方法时出错:评估源文件:内联评估:``导入组织。json。JSONObject;导入组织。json。杰索纳雷;导入java。lang.String;…'':类型化变量