我有一个方法,如果输入为空,则应抛出异常。输入(在本例中为列表)如果为空则将抛出异常。我已经使用JUnit对此进行了调试,并且可以确认传入[]
会抛出异常。但是,在我的前端应用程序中,传入空列表仍然会将响应状态显示为200(如开发人员控制台中所示)。不应该抛出异常产生500的响应状态?至少那是我正在寻找的,所以这样我就可以向用户回复错误消息。如何获得以下信息以生成500的响应状态?我正在使用spring框架。
public Boolean validate(List<HashMap<String, Object>> myList) throws MyException{
Boolean hasErrors = false;
if(!myList.isEmpty()){
//logic goes here
....
} else{
hasErrors = true;
throw new MyException("myList shouldn't be empty ");
}
return hasErrors;
}
此处的异常类:
public class MyException extends Exception {
public MyException() { super(); }
public MyException(String message) { super(message); }
public MyException(String message, Throwable cause) { super(message, cause); }
public MyException(Throwable cause) { super(cause); }
}
任何帮助都将不胜感激。
答案 0 :(得分:0)
我建议您使用proper exception handling using Spring MVC,这样,在抛出异常时应该将什么作为状态代码返回更清楚。
例如,您可以在异常类中执行以下操作:
@ResponseStatus(value=HttpStatus.INTERNAL_SERVER_ERROR, reason="myList shouldn't be empty")
public class MyException extends Exception {
public MyException() { super(); }
public MyException(String message) { super(message); }
public MyException(String message, Throwable cause) { super(message, cause); }
public MyException(Throwable cause) { super(cause); }
}
答案 1 :(得分:0)
您可以使用@ControllerAdvice
来处理您抛出的异常,然后指定您希望客户返回的状态。
以下是我测试的示例,我测试用户上传的文件是否对网站来说太大而且返回错误请求(html代码400)。
toExceptionResponeString
只是一个将我的异常转换为json字符串的方法,任何字符串都会为返回做。
您可以使用MyException
课程代替MaxUploadSizeExceededException
并从那里处理。
@ControllerAdvice
public class ExceptionController extends ResponseEntityExceptionHandler {
@Autowired
private ApplicationLogService appLogService;
@ExceptionHandler(value = { MaxUploadSizeExceededException.class })
protected ResponseEntity<Object> handleMaxUploadSizeExceededException(Exception ex, WebRequest request) {
MaxUploadSizeExceededException musee = (MaxUploadSizeExceededException)ex;
SizeLimitExceededException slee = musee.getCause() instanceof SizeLimitExceededException ? (SizeLimitExceededException) musee.getCause() : null;
Long maxSize = slee == null ? musee.getMaxUploadSize() : slee.getPermittedSize();
Long actualSize = slee == null ? Long.valueOf(request.getHeader("Content-Length")) : slee.getActualSize();
PortalException pre = PortalException.fileSizeTooLarge(maxSize, actualSize);
try {
appLogService.addExceptionEntry(pre.getMessage());
} catch (Exception e) { }
return handleExceptionInternal(ex, toExceptionResponseString(pre), new HttpHeaders(), HttpStatus.BAD_REQUEST, request);
}
}