gpt4 book ai didi

java - Jersey 异常映射不同的上下文

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

所以我正在使用 Jersey 构建一个 mvc 应用程序。接受 Path 参数 (@PathParam) 的方法。

如果抛出自定义异常 (ExampleException),则使用异常映射器返回 404 Not Found 响应。

@Provider
public class ExampleExceptionMapper implements ExceptionMapper<ExampleException> {
@Override
public Response toResponse(ExampleException ex) {
return Response.status(Status.NOT_FOUND).entity("Not Found - " + ex.getMessage()).build();
}

}

但是,我正在实现@FormParam,以便用户向服务器发送POST。引发了完全相同的异常,但我应该返回 400 Bad Request 响应。在不修改异常的情况下,我如何才能使异常映射器返回正确的响应代码?

最佳答案

最简单的方法是创建多个 ExceptionMappers,每个 ExceptionMapper 对应于 ExampleException 的特定子类。

但是你想要两种情况都有相同的异常,并决定是否为 GET/PathParam 和 POST/FormParam 抛出 404,你可以注入(inject) request进入映射器并检查它是什么方法:

@Provider
public class ExampleExceptionMapper implements ExceptionMapper<ExampleException> {
@Context Request request;
@Override
public Response toResponse(ExampleException ex) {
if ("POST".equals(requset.getMethod()))
return Response.status(Status.BAD_REQUEST).build();
else
return Response.status(Status.NOT_FOUND).entity("Not Found - " + ex.getMessage()).build();
}
}

如果你想通过PathParams来决定,可以注入(inject)UriInfo :

@Provider
public class ExampleExceptionMapper implements ExceptionMapper<ExampleException> {
@Context UriInfo info;
@Override
public Response toResponse(ExampleException ex) {
if (info.getPathParameters().isEmpty())) //please make better condition based on your needs
return Response.status(Status.BAD_REQUEST).build();
else
return Response.status(Status.NOT_FOUND).entity("Not Found - " + ex.getMessage()).build();
}
}

关于java - Jersey 异常映射不同的上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38332942/

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