[SPRING] HttpMediaTypeNotAcceptableException / HttpMediaTypeNotAcceptableException : 허용되는 표현을 찾을 수 없습니다.
SPRINGHttpMediaTypeNotAcceptableException / HttpMediaTypeNotAcceptableException : 허용되는 표현을 찾을 수 없습니다.
클라이언트가 연결하려고하는 API가 있습니다. 그러나 그것은 오류를 throw합니다 :
2015 09 22 04:21:44.297 [org.springframework.web.servlet.mvc.method.annotation.HttpEntityMethodProcessor] Could not parse Accept header: Invalid token character ',' in token "json,application/x-www-form-urlencoded"
2015 09 22 04:21:44.298 [org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver] Resolving exception from handler [public org.springframework.http.ResponseEntity<java.lang.String> com.areviews.api.restcontroller.APIOrderController.getNewOrderApi(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) throws java.lang.Exception]: org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation
2015 09 22 04:21:44.298 [org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver] Invoking @ExceptionHandler method: public org.springframework.web.servlet.ModelAndView com.areviews.web.controller.AbstractController.handleException(java.lang.Exception,javax.servlet.http.HttpServletRequest)
org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation
at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:115)
at org.springframework.web.servlet.mvc.method.annotation.HttpEntityMethodProcessor.handleReturnValue(HttpEntityMethodProcessor.java:129)
at org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:74)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:617)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:578)
제어 장치:
@RequestMapping(value = {"order/add"}, method = RequestMethod.POST, produces="application/json; charset=utf-8")
@ResponseBody
public ResponseEntity<String> getNewOrderApi(HttpServletRequest request,
HttpServletResponse response) throws Exception {
.....
return JsonUtils.createJson(jsonObj);
}
jQuery를 사용하여 API를 요청합니다.
$.ajax({
url: "https://api.mywebsite.com/apiv1/order/add",
type: 'POST',
beforeSend: function(xhr) {
xhr.setRequestHeader("Content-Type","application/json;charset=utf-8");
},
data : JSON.stringify(data),
dataType: 'json',
success: function(data) {
if (data.success == true){
console.log(data);
}else{
console.log("error: " + data.error_description);
}
}
});
문제는 요청 헤더에서 "Content-Type"입니다.
Accept:application/json, text/javascript, */*
Accept-Encoding:gzip, deflate
Accept-Language:zh,zh-TW;q=0.8,en-US;q=0.6,en;q=0.4
Connection:keep-alive
Content-Length:561
Content-Type:application/x-www-form-urlencoded, application/json;charset=UTF-8
우리는 "application / x-www-form-urlencoded"가 어디서 왔는지 ( ","는 ";"이어야하므로 문제를 만듭니다) 모릅니다. 내 편이 뭘 할 수 있니? 그들의 편에서 무엇을 할 수 있습니까?
해결법
-
==============================
1.나는 또한 똑같은 문제에 직면했다.
나는 또한 똑같은 문제에 직면했다.
Volley를 사용하여 안드로이드에서 API를 공격하려고했습니다.
2 가지 Content-Type이 있습니다. 하나는 요청 헤더 Content-Type이고 다른 하나는 Body Content-Type입니다. 발리에서 POST 또는 PUT 요청을 시작하면 발리는 요청 헤더를 가져 와서 Content-Type 본문을 확인합니다. 본문 Content-Type이 언급되지 않은 경우 발리는 단독으로 추가됩니다. Volley는 Content-Type과 우리 서버 모두를 하나의 Content-Type 만 허용 할 수 있습니다. 그러나 발리 슛이 Header와 Body에 대해 Content-Type을 결합하기 때문에 "application / json, application / x-www-form-urlencoded; charset = utf-8"이됩니다.
여기서 "application / x-www-form-urlencoded"는 요청 본문에 대한 Content-Type입니다. 따라서이 문제를 해결하려면 getBodyContentType () 메서드를 재정 의하여 null을 반환 할 수 있습니다.
@Override public String getBodyContentType() { //return super.getBodyContentType(); return null; }
""반환을 사용하지 마십시오. return ""을 사용하면 예외가 발생합니다.
[org.springframework.web.servlet.mvc.method.annotation.HttpEntityMethodProcessor] Could not parse Accept header: Invalid token character ',' in token "json, "
희망이 도움이 될 것입니다.
from https://stackoverflow.com/questions/32709072/httpmediatypenotacceptableexception-httpmediatypenotacceptableexception-could by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 싱글 톤 대신 Pooled Spring Bean을 사용하는 방법? (0) | 2019.05.26 |
---|---|
[SPRING] 봄 부팅 mvc : 샘플을 따라 한 후에 실패 함 (0) | 2019.05.26 |
[SPRING] PersistentEntityResourceAssembler 매개 변수가있는 RestController 용 JUnit (0) | 2019.05.26 |
[SPRING] 404 Tomcat의 외부 웹 사이트로 리디렉션하는 방법 (0) | 2019.05.26 |
[SPRING] 스프링 부트 2 보안 기본 인증 (0) | 2019.05.26 |