@RequestMapping(method = RequestMethod.GET)
@ResponseBody
public List<Country> getListOfCountries() {
return countryService.listAll();
}
它显示对象的 json 视图,但如果服务返回 null,那么我想显示一条错误消息,请问有什么建议吗?
@RequestMapping(method = RequestMethod.GET)
@ResponseBody
public List<Country> getListOfCountries() {
return countryService.listAll();
}
它显示对象的 json 视图,但如果服务返回 null,那么我想显示一条错误消息,请问有什么建议吗?
我认为你有几个选择:
如果你返回一个空值,它将作为一个空字符串“”返回,你可能可以查找并处理它。
在您的列表顶部返回一个包装器类型,这样如果包装的列表为空,则类似这样的东西将返回给客户端{"countries":null}
,这可以在 javascript 端更容易地处理。
抛出一个异常,它将作为 500 状态代码传播回客户端,然后您可以在 javascript 端有一个错误处理程序来处理这种情况。
首先,即使这不能直接回答问题,您的对象也不应该返回null而不是空集合 - 您可以在Effective Java 2nd Edition,Item 43 / p.201中找到原因
因此,如果没有找到国家的情况是正常的,则必须由客户端 JS 代码处理,该代码将检查计数并显示相应的消息。
如果出现问题,您可以抛出异常(正如 Biju 指出的那样 +1) - 我相信应该抛出异常的是服务,因为它知道发生异常的原因,并且无论如何都不返回 null。
我想在 Spring 3.2 中补充一点(在 Spring 3.2 之前的返回响应正文很复杂),您可以设置一个@ExceptionHandler,它既可以返回 JSON,也可以设置 HTTP 状态代码,稍后可以由客户端处理。我认为在这里返回带有一些错误代码的自定义 JSON 响应是最理想的。
@RequestMapping("/test")
@ResponseBody
public List<Country> getListOfCountries() {
//assuming that your service throws new NoCountriesFoundException();
//when something goes wrong
return countryService.listAll();
}
@ExceptionHandler(NoCountriesFoundException.class)
ResponseEntity<String> test() {
return new ResponseEntity<String>(
"We are sorry, our server does not know any countries yet.",
HttpStatus.I_AM_A_TEAPOT );
}
然后在JS代码中,可以根据返回的状态码做具体的处理。
此外,为了避免@ExceptionHandler
在不同的控制器中声明相同的内容,在 Spring 3.2 中,您可以将@ExceptionHandler
其放入带@ControllerAdvice
注释的类中。
有关详细信息,请参阅http://static.springsource.org/spring/docs/current/spring-framework-reference/htmlsingle/#mvc-exceptionhandlers和http://www.springsource.org/node/3738了解 3.2 具体内容