在Spring Boot中,如何在JSON中抛出异常

我有一个请求映射-

  @RequestMapping("/fetchErrorMessages")

public @ResponseBody int fetchErrorMessages(@RequestParam("startTime") String startTime,@RequestParam("endTime") String endTime) throws Exception

{

if(SanityChecker.checkDateSanity(startTime)&&SanityChecker.checkDateSanity(endTime))

{

return 0;

}

else

{

throw new NotFoundException("Datetime is invalid");

}

}

如果startTime和endTime无效,我想抛出500错误,但以JSON返回异常字符串。但是,我得到一个HTML页面,而不是说

此应用程序没有针对/ error的显式映射,因此您将其视为后备。

IST 2017年12月20日星期三10:49:37

发生意外错误(类型=内部服务器错误,状态= 500)。

日期时间无效

相反,我想用JSON返回500

{"error":"Date time format is invalid"}

我该怎么办?

回答:

假设您有一个自定义的Exception类NotFoundException及其实现,如下所示:

public class NotFoundException extends Exception {

private int errorCode;

private String errorMessage;

public NotFoundException(Throwable throwable) {

super(throwable);

}

public NotFoundException(String msg, Throwable throwable) {

super(msg, throwable);

}

public NotFoundException(String msg) {

super(msg);

}

public NotFoundException(String message, int errorCode) {

super();

this.errorCode = errorCode;

this.errorMessage = message;

}

public void setErrorCode(int errorCode) {

this.errorCode = errorCode;

}

public int getErrorCode() {

return errorCode;

}

public void setErrorMessage(String errorMessage) {

this.errorMessage = errorMessage;

}

public String getErrorMessage() {

return errorMessage;

}

@Override

public String toString() {

return this.errorCode + " : " + this.getErrorMessage();

}

}

现在,您想从控制器抛出一些异常。如果抛出异常,则必须从标准错误处理程序类中捕获该异常,例如在spring说,它们提供了@ControllerAdvice注释以应用于制作标准错误处理程序类。当将它应用于类时,该spring组件(我是说您注释的类)可以捕获从控制器抛出的任何异常。但是我们需要使用适当的方法来映射异常类。因此,我们为您的异常NotFoundException处理程序定义了一种方法,如下所示。

@ControllerAdvice

public class RestErrorHandler {

@ExceptionHandler(NotFoundException.class)

@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)

@ResponseBody

public Object processValidationError(NotFoundException ex) {

String result = ex.getErrorMessage();

System.out.println("###########"+result);

return ex;

}

}

您想将 发送

,因此在这里我们使用@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)。由于您使用了Spring-

boot,因此您无需制作json字符串,只需简单的注释@ResponseBody即可自动完成。

以上是 在Spring Boot中,如何在JSON中抛出异常 的全部内容, 来源链接: utcz.com/qa/398161.html

回到顶部