2013-08-22 4 views
1

AbstractHttpMessageConverter writeInternal() 메서드에서 응답 상태 코드를 변경할 수 있습니까?AbstractHttpMessageConverter에서 응답 코드 변경

내 AbstractHttpMessageConverter (MappingJackson2HttpMessageConverter 확장)에서 오류 응답을 200으로 변경하고 실제 상태 코드 (예 : 400)를 json의 상태 필드에 추가하고 싶습니다.

EDIT1

내가 돌아 해요 코드와 같은 : :

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

어딘가에 내가 응답 몸을 차단하려는 :

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

또는 오류의 경우

a) 원래 응답 본체 (enity)를 상태 코드 으로 감싸십시오 b) 응답 상태 코드를 20으로 변경하십시오

0 그래서 두 변종이 의미 :

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

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

과 HTTP 상태 200이 반환됩니다 두 경우이다.

MappingJackson2HttpMessageConverter를 확장하고 writeInternal 메서드를 오버라이드하여이 작업을 수행하려고 생각했지만 불행히도 상태 코드를 변경할 수 없습니다.

참고 컨트롤러 클래스에서는이 기능을 사용하고 싶지 않습니다. 그들은 단지 기본 json 구조를 반환해야합니다.

+0

일반적으로 응답 본문에 http 코드를 두는 것이 좋지 않은 것으로 간주됩니다. 중복성을 도입하기 때문입니다. 특별한 상황에서는 괜찮을 수도 있습니다. – Qw3ry

답변

0

아니요, 불가능합니다. HttpMessageConverter는 특정 헤더를 설정하고 메시지 본문을 쓸 수 있지만 상태 코드는 설정할 수 없습니다. 아마도 HttpMessageConverter에 객체를 보내기 전에 상태 코드를 200으로 변경하고 400으로 속성을 설정할 수 있습니다.

개체와 함께 상태 코드를 설정할 수있는 ResponseEntity 개체를 사용하고 싶지만 코드를 보지 않아도 작동 여부를 알 수 없습니다.

+0

내 코드를 보여주기 위해 질문을 편집했습니다. –