【发布时间】:2016-03-05 08:11:55
【问题描述】:
我正在使用 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 模式)?
【问题讨论】:
-
如何对模式进行验证?例如,您可以将 JSON 作为字符串接收,对其进行验证,然后使用 Jackson 从它创建一个对象。但是,既然您正在执行验证,您是否考虑过Bean Validation?
-
问题是,我必须更改 API 以在方法参数 afaik 中接收 json 字符串而不是
public Response createTask(String jsonTask)之类的对象,但如果可能的话,我更愿意将对象放在那里。