JAVA中RESTful服务中的异常处理

时间:2018-01-09 06:10:37

标签: java rest web-services jax-rs

我一直在JAVA工作,并在很长一段时间内开发Restful服务。我刚刚完成了服务的开发,现在测试阶段就是进步,这就是问题出现的地方。

究竟发生了什么,以此服务为例:

    location = locationFacadeREST.findBy("findByP852", item[i]).get(0); 
    System.out.println(location);

该声明将返回'项目'从我的数据库中的位置表,如果项目在数据库中可用,它将返回完美数据,但如果不在数据库中则抛出内部服务器异常。

用try try这样处理:

try{               
    location = locationFacadeREST.findBy("findByP852", item[i]).get(0); 
       }catch(ArrayIndexOutOfBoundsException e){
           output = "Invalid Accession No.";
           return output;               
       }

但我想在100多个文件中实现这一点。 是否有任何方法可以执行此操作并在需要处理异常时调用try catch块。

还请告诉我是否有办法以xml格式返回catch块。

2 个答案:

答案 0 :(得分:-1)

您的问题尚不清楚,但我会尽力提供帮助。 (你正在使用什么框架,为什么不使用try catch块或一些本机拦截器)。如果您使用的是spring框架,请使用控制器建议来查看全局异常处理程序的此实现。那应该有用;

@Slf4j
public abstract class GlobalExceptionHandler {
    ResponseEntity<Object> handleException(WebRequest request, String message, int httpStatusCode)
            throws IllegalArgumentException
    {
        String exceptionMessage = "Exception occured while system is running.";
        if (message != null)
        {
            exceptionMessage = message;
        }
        ErrorResource error = new ErrorResource(correlationId, exceptionMessage);
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        HttpStatus annotation = HttpStatus.valueOf(httpStatusCode);
        log.error(
                "Exception message = {} and Http Status code = {}",
                exceptionMessage,
                httpStatusCode);
        return new ResponseEntity<>(error, headers, annotation);
    }
}

但是这个类需要从@ControllerAdvice类调用。

@ExceptionHandler(Exception.class)
public ResponseEntity<Object> handleAllException(WebRequest request, Exception ex) {
    return handleException(request, ex.getMessage(), HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
}

答案 1 :(得分:-1)

您可以使用@RestControllerAdviceregion-time-to-live图层全局处理异常

只需要实现预期的异常处理程序方法。

您可以找到详细信息异常处理帖子here