[SPRING] @RequestBody MultiValueMap에 대해 'application / x-www-form-urlencoded; charset = UTF-8'콘텐츠 유형이 지원되지 않습니다.
SPRING@RequestBody MultiValueMap에 대해 'application / x-www-form-urlencoded; charset = UTF-8'콘텐츠 유형이 지원되지 않습니다.
Spring @Controller로 x-www-form-urlencoded 문제에 대한 답을 바탕으로
아래 @Controller 메서드를 작성했습니다.
@RequestMapping(value = "/{email}/authenticate", method = RequestMethod.POST
, produces = {"application/json", "application/xml"}
, consumes = {"application/x-www-form-urlencoded"}
)
public
@ResponseBody
Representation authenticate(@PathVariable("email") String anEmailAddress,
@RequestBody MultiValueMap paramMap)
throws Exception {
if(paramMap == null || paramMap.get("password") == null) {
throw new IllegalArgumentException("Password not provided");
}
}
아래 오류로 인해 요청이 실패합니다.
{
"timestamp": 1447911866786,
"status": 415,
"error": "Unsupported Media Type",
"exception": "org.springframework.web.HttpMediaTypeNotSupportedException",
"message": "Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported",
"path": "/users/usermail%40gmail.com/authenticate"
}
[추신 : 저지는 훨씬 더 친숙했지만 여기에서 실질적인 제한을 받으면 사용할 수 없었다]
해결법
-
==============================
1.문제는 application / x-www-form-urlencoded를 사용할 때 Spring이이를 RequestBody로 이해하지 못한다는 것입니다. 그래서 우리가 이것을 사용하려면 우리는 @RequestBody 주석을 제거해야합니다.
문제는 application / x-www-form-urlencoded를 사용할 때 Spring이이를 RequestBody로 이해하지 못한다는 것입니다. 그래서 우리가 이것을 사용하려면 우리는 @RequestBody 주석을 제거해야합니다.
그런 다음 다음을 시도하십시오.
@RequestMapping(value = "/{email}/authenticate", method = RequestMethod.POST, consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, produces = {MediaType.APPLICATION_ATOM_XML_VALUE, MediaType.APPLICATION_JSON_VALUE}) public @ResponseBody Representation authenticate(@PathVariable("email") String anEmailAddress, MultiValueMap paramMap) throws Exception { if(paramMap == null && paramMap.get("password") == null) { throw new IllegalArgumentException("Password not provided"); } return null; }
@RequestBody 주석을 제거했습니다.
답변 : 콘텐츠 유형 application / x-www-form-urlencoded가 Spring에서 작동하지 않는 HTTP Post 요청
-
==============================
2.이제는 @RequestParam으로 메서드 매개 변수를 표시 할 수 있으며 작업을 수행 할 것입니다.
이제는 @RequestParam으로 메서드 매개 변수를 표시 할 수 있으며 작업을 수행 할 것입니다.
@PostMapping( "some/request/path" ) public void someControllerMethod( @RequestParam Map<String, String> body ) { //work with Map }
-
==============================
3.콘텐츠 유형을 application / json으로 설정하라는 요청에 헤더를 추가하십시오.
콘텐츠 유형을 application / json으로 설정하라는 요청에 헤더를 추가하십시오.
curl -H 'Content-Type: application/json' -s -XPOST http://your.domain.com/ -d YOUR_JSON_BODY
이 방법으로 스프링은 내용을 파싱하는 방법을 알고있다.
-
==============================
4.나는이 StackOverflow 대답에 대안에 대해 썼다.
나는이 StackOverflow 대답에 대안에 대해 썼다.
나는 코드를 설명하면서 단계적으로 썼다. 짧은 길 :
첫 번째 : 객체 쓰기
두 번째 : AbstractHttpMessageConverter를 확장하는 모델을 매핑하는 변환기를 만듭니다.
셋째 : 봄에이 변환기를 사용하여 configureMessageConverters 메서드를 재정의하는 WebMvcConfigurer.class를 구현하라
네 번째이자 마지막 : 컨트롤러 내부의 매핑에서이 구현 설정을 사용하면 개체 앞에 MediaType.APPLICATION_FORM_URLENCODED_VALUE 및 @RequestBody가 사용됩니다.
저는 스프링 부트 2를 사용하고 있습니다.
-
==============================
5.신속한 Alamofire 3 솔루션
신속한 Alamofire 3 솔루션
Alamofire.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: headers).responseJSON
from https://stackoverflow.com/questions/33796218/content-type-application-x-www-form-urlencodedcharset-utf-8-not-supported-for by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] JPA 구성에서 기본 스키마 이름을 설정하는 방법은 무엇입니까? (0) | 2018.12.06 |
---|---|
[SPRING] 봄 MVC를 사용하여 생성 된 PDF 반환 (0) | 2018.12.06 |
[SPRING] @Controller 클래스의 Spring @Value 주석은 속성 파일 내부의 값을 평가하지 않습니다. (0) | 2018.12.06 |
[SPRING] 스프링 데이터 JPA에서 FetchMode는 어떻게 작동합니까? (0) | 2018.12.06 |
[SPRING] java.lang.ClassNotFoundException : org.springframework.web.servlet.DispatcherServlet (0) | 2018.12.06 |