@RequestMapping(method = RequestMethod.GET)
@ResponseBody
public List<Country> getListOfCountries() {
return countryService.listAll();
}
它显示了对象的json视图,但如果服务返回null,那么我想显示一条错误消息,是否有任何建议?
答案 0 :(得分:2)
我认为你有几个选择:
如果返回null,它将作为空字符串返回“”,您可以查找并处理它。
在列表顶部返回一个包装类型,这样如果包装列表为null,则会返回到客户端{"countries":null}
,这样可以在javascript端更容易处理。
抛出异常,它将作为500状态代码传播回客户端,然后您可以在javascript端有一个错误处理程序来处理这种情况。
答案 1 :(得分:2)
首先,即使这不直接回答问题,你的对象也不应该返回 null 而不是空集合 - 你可以在Effective Java 2nd Edition中找到推理,第43项/ p.201
因此,如果没有找到国家/地区的情况正常,则必须由客户端JS代码处理,该代码将检查计数并显示相应的消息。
如果出现问题,你可以抛出一个异常(因为Biju已经指出+1) - 我相信这是应该抛出异常的服务,因为它知道它发生的原因,并且无论如何都不返回null。
我想在Spring 3.2中添加(在Spring 3.2之前的返回响应体是complicated),你可以设置一个@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特定内容