如何使用Swagger处理异常?

时间:2016-06-14 10:06:37

标签: jersey jax-rs swagger

我正在使用swagger(1.5)和JAX-rs与Jersey(1.13)构建一些测试API,我试图实现异常处理。例如,我从DB(Elasticsearch)

接收结果时有以下代码
@POST
@Path("/category")
@ApiOperation(value="returns products")
@Produces({ "application/json" })
public Response getPostCategories( 
        @ApiParam(value="keyphrase, required=true) @QueryParam("keyphrase") String keyphrase,
        @ApiParam(value="category) @QueryParam("category") String category,     
        @Context SecurityContext securityContext) 
throws WebApplicationException {        
    SearchRequest searchRequest = new SearchRequest();
    searchRequest.setKeyphrase(keyphrase);
    searchRequest.setCategory(category);

    SearchCategoryQuery categoryQuery = new SearchCategoryQuery();
    String searchResponse = null;
    try
    {           
        searchResponse = categoryQuery.searchCategory(searchRequest);
    }
    catch (WebApplicationException ex)
    {
        throw new WebApplicationException(Response.status(Status.BAD_REQUEST).entity("results no found").type(javax.ws.rs.core.MediaType.APPLICATION_JSON).build());
    }
    return Response.ok(searchResponse).build();
}

但是,在输出招摇中始终打印相同的响应enter image description here

我需要的是接收我在每个异常中指定的错误消息。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

Swagger本身并不处理应用程序异常。

您需要创建自定义异常类(扩展java.lang.exception)或使用现有类(如您已使用的WebApplicationException)并使API定义抛出这些错误。所以基本上你需要使用Java / J2EE / Jersey来抛出适当的异常。 Swagger UI将为您显示它们。

检查this链接以获取有关REST异常处理的详细信息。