我想在遇到错误时将produces = text/plain
设置为produces = application/json
。
@RequestMapping(value = "/v0.1/content/body", method = RequestMethod.GET, produces = "text/plain")
@ResponseBody
public Object getBody(@RequestParam(value = "pageid") final List<String> pageid, @RequestParam(value = "test") final String test) {
if (!UUIDUtil.isValid(pageid)) {
Map map = new HashMap();
map.put("reason", "bad pageId");
map.put("pageId", pageId);
map.put("test", test);
return new ResponseEntity<Object>(map, HttpStatus.BAD_REQUEST);
}
return "hello";
}
此代码的问题在于,当我发送无效的pageId时,它不会将错误打印为json。它给了我一个HTTP 406错误不可接受,因为它期望生成text / plain但我没有返回一个String。
答案 0 :(得分:1)
处理错误的最简单方法是使用@ExceptionHandler
:
@ExceptionHandler(EntityNotFoundException.class) //Made up that exception
@ResponseBody
@ResponseStatus(value = HttpStatus.NOT_FOUND)
public ErrorObject handleException(Exception e) {
return new ErrorObject(e.getMessage());
}
然后假设您已正确配置了解析器并将正确的JSON序列化库放在类路径中,ErrorObject
的实例将作为JSON响应返回给客户端。
当然,您可以根据需要设置多个@ExceptionHandler
方法。