gpt4 book ai didi

java - Swagger API 通过 json 验证使用 json

转载 作者:行者123 更新时间:2023-11-30 07:45:20 24 4
gpt4 key购买 nike

我正在使用 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 对象。除了一个异常(exception)之外,这一切都运行良好:API 接受任何正确形成的 json 字符串,但忽略 json 的内容,这意味着我得到一个使用默认值创建的对象。

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

最佳答案

因为您不想在方法中接收 JSON 字符串,并且 Bean Validation不是您验证的选项,您可以尝试 MessageBodyWriter<T>

JAX-RS 使用 MessageBodyWriter<T> s解析传入的请求。既然您想要一些非常具体的东西,请考虑 writing your own MessageBodyWriter<T>

请参阅以下示例:

@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 运行时在提供程序扫描阶段自动发现该类。

关于java - Swagger API 通过 json 验证使用 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34019825/

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