[SPRING] Accept 헤더가 * / * 일 때 @ResponseBody가있는 Spring 반환 json은 HttpMediaTypeNotAcceptableException을 throw합니다.
SPRINGAccept 헤더가 * / * 일 때 @ResponseBody가있는 Spring 반환 json은 HttpMediaTypeNotAcceptableException을 throw합니다.
스프링 3.0.0을 사용하고 있습니다.
JSON에 직렬화하려는 객체를 반환하는 끝점이 있습니다. Accept : application / json으로 요청이 오면 제대로 작동합니다. 요청은 현재 * / *를 Accept 값으로 사용하고 있습니다. 불행히도 나는 요청에 대한 통제권이 없다. 그렇지 않으면 나는 그것을 바꿀 것이다. * / *를 수신하면 HttpMediaTypeNotAcceptableException 예외가 발생합니다.
이 accept 패턴을 application / json에 매핑하는 방법이 있습니까?
이것은 다른 질문과 매우 유사하지만 중요한 차이점은 Accept 헤더가 * / *이어야한다는 것입니다. Spring의 Json은 적절한 응답으로 해결되지 않습니다.
내 컨트롤러는 다음과 같습니다.
@RequestMapping(value = "/v1/endpoint", method = RequestMethod.POST)
@ResponseBody
public EndpointResponse runEndpoint(@RequestBody String jsonData) {
ObjectMapper mapper = new ObjectMapper();
EndpointRequest opRequest = null;
EndpointResponse opResponse = null;
try {
opRequest = mapper.readValue(jsonData, EndpointRequest.class);
//....do stuff
} catch (JsonParseException e) {
return handleException(opResponse, e);
} catch (JsonMappingException e) {
return handleException(opResponse, e);
} catch (IOException e) {
return handleException(opResponse, e);
}
return opResponse;
}
감사!
해결법
-
==============================
1.오늘 내가 모은 모든 것에서이 문제를 해결할 수있는 2 가지 옵션이 있습니다.
오늘 내가 모은 모든 것에서이 문제를 해결할 수있는 2 가지 옵션이 있습니다.
@RequestMapping(value = "/v1/endpoint", method = RequestMethod.POST) public void runEndpoint(@RequestBody String jsonData, ServletResponse response) { ObjectMapper mapper = new ObjectMapper(); EndpointRequest opRequest = null; EnpointResponse opResponse = null; StringWriter sw = new StringWriter(); try { opRequest = mapper.readValue(jsonData, EndpointRequest.class); opResponse = ...do stff... mapper = new ObjectMapper(); mapper.writeValue(sw, opResponse); response.setContentType("application/json"); response.getOutputStream().write(sw.toString().getBytes()); } catch (JsonParseException e) { handleException(opResponse, e, response); } catch (JsonMappingException e) { handleException(opResponse, e, response); } catch (IOException e) { handleException(opResponse, e, response); } }
당신이 더 우아한 무엇이라도 있으면, 나는 그것을 보는 것을 좋아할 것이다!
-
==============================
2.나는이 같은 문제에 직면했다. 더 우아한 것은 아니지만 내가 선택한 것은 문자열을 반환하고 개체를 Json 자신으로 변환하는 것입니다. Gson을 JSON 라이브러리로 사용하기로 결정했습니다.
나는이 같은 문제에 직면했다. 더 우아한 것은 아니지만 내가 선택한 것은 문자열을 반환하고 개체를 Json 자신으로 변환하는 것입니다. Gson을 JSON 라이브러리로 사용하기로 결정했습니다.
@Controller public class NewAbstractController { @RequestMapping(value = "/simple", method = RequestMethod.GET) public @ResponseBody String SayHello() { Foo foo = new Foo(); foo.Name = "Chris"; foo.age = 30; Gson gson = new Gson(); return gson.toJson(foo); } public class Foo implements Serializable { public String Name; public Integer age; } }
-
==============================
3.이러한 종속성을 pom.xml에 포함하십시오.
이러한 종속성을 pom.xml에 포함하십시오.
<dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-core-asl</artifactId> <version>1.9.3</version> </dependency> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>1.9.3</version> </dependency>
from https://stackoverflow.com/questions/5315288/spring-returning-json-with-responsebody-when-the-accept-header-is-throws-ht by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] RestTemplate response.getBody는 put 및 post 요청에 대해 4 ** 및 5 ** 오류에 대한 예외를 throw하지만 get 요청에 대해서는 정상적으로 작동합니다. (0) | 2019.04.13 |
---|---|
[SPRING] 봄 보안 차단 URL 역할 (0) | 2019.04.13 |
[SPRING] Spring이있는 EJB3 (0) | 2019.04.13 |
[SPRING] 아약스 파일 업로드 및 MultipartFile이있는 Spring MVC (0) | 2019.04.13 |
[SPRING] Spring 3 MVC 요청 유효성 검사 (0) | 2019.04.13 |