在AbstractHttpMessageConverter中更改响应代码

时间:2013-08-22 13:58:14

标签: spring rest spring-mvc

是否可以在AbstractHttpMessageConverter writeInternal()方法中更改响应状态代码?

在我的AbstractHttpMessageConverter(扩展MappingJackson2HttpMessageConverter)中,我想将错误响应更改为200,并将实际状态代码(例如400)添加到json中的状态字段。

EDIT1

我正在返回代码:

JSONObject json= new JSONObject();
json.put("name", "My Name");
return new ResponseEntity<JSONObject>(json, HttpStatus.OK);

或出现错误时:

JSONObject json= new JSONObject();
json.put("error", "My Error");
return new ResponseEntity<JSONObject>(json, HttpStatus.BAD_REQUEST);

某处我想拦截响应主体并且: a)用状态代码包装原始响应体(enity) b)将响应状态代码更改为200

因此,对于这两种变体,这意味着:

{ "status": 200, "response": { "name": "My Name" } }

{ "status": 400, "response": { "error": "My Error" } }

并且在这两种情况下都将返回http状态200。

我正在考虑通过扩展MappingJackson2HttpMessageConverter并覆盖writeInternal方法来做到这一点,但遗憾的是我无法更改状态代码。

注意我不想在我的控制器类中使用它。他们应该只返回基础json结构。

1 个答案:

答案 0 :(得分:0)

不,这是不可能的。 HttpMessageConverter可以设置某些标头并写入消息正文,但它不能设置状态代码。也许您可以在将对象发送到HttpMessageConverter之前将状态代码更改为200并将属性设置为400。

我喜欢使用ResponseEntity对象,它允许您设置状态代码和对象,但是没有看到您的代码,我不知道它是否适合您。