我正在项目中使用Below Custom Exception类
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中它将异常捕获不在 BadRequestException Catch块。 任何人都可以知道我做错了什么。
答案 0 :(得分:0)
你的servlet永远不会得到那个例外。这是因为servlet实际上是一个REST客户端,并且您正在调用远程资源方法来获取一些数据。资源调用将成功(并且某些数据将被映射回来),否则它将失败并且您将不会获得任何数据(或客户端错误)。
另外,您的服务器端异常映射器存在问题。在调用之前,您不验证该异常实际上是否有响应实体:
brexec.getResponse().getEntity()
如果异常没有响应,上面的代码将导致空指针异常。
一些快速说明:
message
属性。您无需另外定义response
属性