[SPRING] 콘텐츠 유형 application / x-www-form-urlencoded가 Spring에서 작동하지 않는 Http Post 요청
SPRING콘텐츠 유형 application / x-www-form-urlencoded가 Spring에서 작동하지 않는 Http Post 요청
현재 봄에 새로 온 것은 HTTP POST 요청 응용 프로그램 / x-www-form-url을 인코딩하려고하지만 헤더를 유지하면 스프링이 그것을 인식하지 못하고 415 지원되지 않는 미디어 유형 x-www-form-urlencoded 용
아무도 그것을 해결하는 방법을 알 수 있습니까? 저를 코멘트하십시오.
내 컨트롤러의 예는 다음과 같습니다.
@RequestMapping(value = "/patientdetails", method = RequestMethod.POST, headers="Accept=application/x-www-form-urlencoded")
public @ResponseBody List<PatientProfileDto> getPatientDetails(
@RequestBody PatientProfileDto name) {
List<PatientProfileDto> list = new ArrayList<PatientProfileDto>();
list = service.getPatient(name);
return list;
}
해결법
-
==============================
1.문제는 application / x-www-form-urlencoded를 사용할 때 Spring이이를 RequestBody로 이해하지 못한다는 것입니다. 그래서 우리가 이것을 사용하려면 우리는 @RequestBody 주석을 제거해야합니다.
문제는 application / x-www-form-urlencoded를 사용할 때 Spring이이를 RequestBody로 이해하지 못한다는 것입니다. 그래서 우리가 이것을 사용하려면 우리는 @RequestBody 주석을 제거해야합니다.
그런 다음 다음을 시도하십시오.
@RequestMapping(value = "/patientdetails", method = RequestMethod.POST,consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE) public @ResponseBody List<PatientProfileDto> getPatientDetails( PatientProfileDto name) { List<PatientProfileDto> list = new ArrayList<PatientProfileDto>(); list = service.getPatient(name); return list; }
@RequestBody 주석을 제거했습니다.
-
==============================
2.Spring이 사용자의 서비스에서 지원하는 입력 내용 유형을 알려줘야합니다. 요청의 "Content-Type"헤더에 해당하는 Annotation Element를 "소비"하면이 작업을 수행 할 수 있습니다.
Spring이 사용자의 서비스에서 지원하는 입력 내용 유형을 알려줘야합니다. 요청의 "Content-Type"헤더에 해당하는 Annotation Element를 "소비"하면이 작업을 수행 할 수 있습니다.
@RequestMapping(value = "/", method = RequestMethod.POST, consumes = {"application/x-www-form-urlencoded"})
코드를 게시하면 도움이 될 것입니다.
-
==============================
3.가장 쉬운 방법은 아약스 요청의 콘텐츠 유형을 "application / json; charset = utf-8"로 설정 한 다음 api 메소드가 json을 소비하도록하는 것입니다. 이처럼
가장 쉬운 방법은 아약스 요청의 콘텐츠 유형을 "application / json; charset = utf-8"로 설정 한 다음 api 메소드가 json을 소비하도록하는 것입니다. 이처럼
var basicInfo = JSON.stringify( { firstName : playerProfile.firstName(), lastName : playerProfile.lastName(), gender : playerProfile.gender(), address : playerProfile.address(), country : playerProfile.country(), bio : playerProfile.bio() }); $.ajax({ url: "http://localhost:8080/social/profile/update", type: 'POST', dataType: 'json', contentType: "application/json; charset=utf-8", data: basicInfo, success: function(data) { } }); @RequestMapping(value = "/profile/update", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity<ResponseModel> UpdateUserProfile(@RequestBody User usersNewDetails, HttpServletRequest request, HttpServletResponse response){
문제는 스프링 부트가 아약스 요청을 통해 json이 아닌 폼 데이터를 제출하는 데 문제가 있다고 생각합니다. 참고 : 아약스의 기본 콘텐츠 유형은 "application / x-www-form-urlencoded"입니다.
-
==============================
4.@RequestBody를 @RequestParam으로 대체하고 java 엔터티가있는 매개 변수를 허용하지 않아야합니다.
@RequestBody를 @RequestParam으로 대체하고 java 엔터티가있는 매개 변수를 허용하지 않아야합니다.
그러면 컨트롤러는 아마도 다음과 같습니다.
@RequestMapping(value = "/patientdetails", method = RequestMethod.POST, consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) public @ResponseBody List<PatientProfileDto> getPatientDetails( @RequestParam Map<String, String> name) { List<PatientProfileDto> list = new ArrayList<PatientProfileDto>(); ... PatientProfileDto patientProfileDto = mapToPatientProfileDto(mame); ... list = service.getPatient(patientProfileDto); return list; }
from https://stackoverflow.com/questions/34782025/http-post-request-with-content-type-application-x-www-form-urlencoded-not-workin by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] @SpringBootApplication 주석을 사용하여 구성 (0) | 2018.12.20 |
---|---|
[SPRING] 이름이 'entityManagerFactory 인 빈을 만드는 중 오류가 발생했습니다. (0) | 2018.12.20 |
[SPRING] 공용 및 개인 자원에 대해 다른 경로 사용 Jersey + Spring boot (0) | 2018.12.20 |
[SPRING] IllegalArgumentException : 적어도 1 개의 JPA 메타 모델이 존재할 필요가있는 (0) | 2018.12.20 |
[SPRING] JSON 배열을 URL의 매개 변수로 전달하는 방법 (0) | 2018.12.20 |