gpt4 book ai didi

java - Jersey 自定义异常未在 Servlet 类中捕获?

转载 作者:行者123 更新时间:2023-12-01 04:47:18 24 4
gpt4 key购买 nike

我在我的项目中使用下面的自定义异常类

public class BadRequestException extends WebApplicationException {
private static final long serialVersionUID = 1L;
private String message;
public BadRequestException(String message) {
super();
this.message = message;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}

我还创建了一个 Mapper 类..

public class BadRequestExceptionMapper implements ExceptionMapper<BadRequestException> {
public Response toResponse(BadRequestException brexec) {
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(brexec.getResponse().getEntity()).type(MediaType.APPLICATION_JSON).build();
}
}

我通过 Servlet 调用我的服务,异常是由其方法之一引发的,但我无法在 Servlet 类中捕获它。我使用下面的代码来捕获异常。 .

    try{
//Some Business logic then
service.path("restful").path("jwbservice/" + methodName + "/" + id).header("lid", lid).delete(String.class);
}
catch (BadRequestException ex) {
out.println(ex);
}
catch(Exception exe){
out.println(exe);
}

我在 Service 类中使用了此代码的服务方法,它将引发异常。

@DELETE
@Path("/deleteLink/{id}")
@Produces(MediaType.APPLICATION_JSON)
public String deleteLink(@PathParam("id") int id, @HeaderParam("lid") String lid) throws BadRequestException {
if (id<= 0) {
throw new BadRequestException("Required Parameter: id");
}
//Some Business Logic
}

我的服务抛出BadRequestException,但在Servlet中它将Exception捕获而不是在BadRequestException Catch block 中。谁能知道我做错了什么。

最佳答案

您永远不会在 servlet 中遇到该异常。这是因为 servlet 实际上是一个 REST 客户端,并且您正在调用远程资源方法来获取一些数据。资源调用要么成功(并且一些数据将被映射回),要么失败并且您将得不到任何数据(或客户端错误)。

顺便说一句,您的服务器端异常映射器存在问题。在调用之前您没有验证异常是否确实具有响应实体:

brexec.getResponse().getEntity()

如果异常没有响应,上述代码将导致空指针异常。

<小时/>

一些快速说明:

  • 异常类已经有一个 message 属性。您不需要定义额外的
  • 您的异常映射器需要先检查不存在的 response 属性,然后再尝试对其执行某些操作
  • servlet 中的资源路径似乎与服务器端路径不匹配。我认为这是一个复制/粘贴错误。

关于java - Jersey 自定义异常未在 Servlet 类中捕获?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15616264/

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