在Spring中,有没有办法为标题返回不同的Content-Type值?

时间:2014-01-24 01:57:18

标签: java spring rest java-ee

我想在遇到错误时将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。

1 个答案:

答案 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方法。