1. 문제 설명 :
Sprinvmvc의 웹 프로그램에서는 페이지에서 Ajax의 게시물 요청을 보내고 @requestbody를 사용하여 서버의 요청 본문에서 매개 변수를 수신합니다. 실행 중에 서버가 AJAX 요청을 보내기를 원했습니다. 브라우저는 Ajax 쓰기에 문제가 있다고 생각하면서 415 개의 지원되지 않는 미디어 유형 또는 400 상태 코드를 계속 피드백했습니다. 정보를 오랫동안 검색 한 후 Spring-MVC.config 파일의 구성에 누락 된 것이 있음을 발견했습니다. 물론 Ajax에서 컨텐츠 유형 매개 변수의 설정이 실제로 누락되었을 수도 있습니다. 분석 후 SpringMVC-config.xml 파일 구성에 문제가 있어야합니다.
(주) : 400 : (오류 요청) 서버는 요청의 구문을 이해하지 못합니다. 415 : (지원되지 않은 미디어 유형) 요청 된 형식은 요청 된 페이지에서 지원되지 않습니다.
2. 해결책 :
SpringMvc-config.xml 파일에서 stringhttpmessageconverter 요청 정보 변환기가 추가되고 구성 조각은 다음과 같습니다.
<! --- stringhttpmessageConverter bean-> <bean id = "stringhttpmessageconverter"class = "org.springframework.http.converter.stringhttpmessageconverter"/> <!-요청 및 주석 클래스의 맵핑을 완료하기위한 시작 MVC 주석 기능-> = "org.springframework.web.servlet.mvc.annotation.annotationmethodhandleradapter"> <property name = "messageconverters"> <slest> <ref bean = "Mapping JacksonhttpMessageConverter" /> <!-new StringMessAgeConverter bean-> <Ref Bean = "stringhtpmmmsmmsmmsmmsmmestpmmsmmestpmestpmessageconverter". "jsonhttpmessageconverter"/> <Ref bean = "formhttpmessageconverter"/> </ list> </ property> </ bean>
3. HTTPMESSAGECONVERTER 소개 요청 정보 변환기 소개 :
HTTPMESSAGECONVERTER 인터페이스는 HTTP 요청 정보와 HTTP 응답 정보를 형식으로 변환 할 수있는 변환기를 지정합니다. 일반적으로 httpmessageconverter 인터페이스를 구현하는 다음 변환기가 있습니다.
bytearrayhttpmessageconverter : 이진 형식 데이터를 읽고 이진 형식 데이터를 작성하는 책임;
stringhttpmessageconverter : 문자열 형식 데이터를 읽고 이진 형식 데이터를 작성하는 책임;
ResourcehttpMessageConverter : 리소스 파일을 읽고 리소스 파일 데이터를 쓰는 책임;
formhttpmessageconverter : Form으로 제출 된 데이터를 읽는 책임 (읽을 수있는 데이터 형식은 Application/x-www-form-urlencoded이며 multipart/form-data 형식 데이터를 읽을 수 없음); 응용 프로그램/x-www-from-urlencoded 및 multipart/form-data 형식에 데이터 작성을 담당합니다.
Mapping JacksonhttpMessageConverter : JSON 형식의 데이터를 읽고 쓰는 책임;
sourcehttpmessageconverter : xml에서 javax.xml.transform.source에 의해 정의 된 데이터를 읽고 쓰는 책임;
jaxb2rootelementhttpmessageconverter : XML 태그 형식의 데이터를 읽고 쓰는 책임;
atomfeedhttpmessageconverter : 원자 형식으로 데이터를 읽고 쓰는 책임;
RSSCHANNELHTTPMESSAGECONVERTER : RSS 형식의 데이터를 읽고 쓰는 책임;
httpmessageconverter에 대한 자세한 내용은 다음을 참조하십시오.
http://docs.spring.io/spring/docs/3.0.x/api/org/springframework/http/converter/httpmessageconverter.html
4.httpmessageConverter 요청 정보 변환기 실행 프로세스 :
사용자가 요청을 보내면 @requestbody 주석이 요청 본문의 데이터를 읽습니다. 기본 요청 변환기 httpMessageConverter는 요청 헤더에서 컨텐츠 유형을 얻어 요청 헤더의 데이터 형식을 확인하여 해당 변환기를 요청 데이터에 적응시킵니다. 예를 들어, ContentType : Applicatin/JSON, 변환기는 Mapping JacksOnHttTpMessAgeConverter에 적용됩니다. 마찬가지로 @ResponseBody 주석은 httpmessageConverter가 헤더의 수락 속성을 감지하여 응답 변환기를 조정할 수 있도록합니다.
요약 :
서버 데이터 수신에 SpringMVC를 사용할 때, 특히 AJAX 요청을 할 때 ContentType 속성의 설정에 특별한주의를 기울이고 속성을 받아들이고 SpringMVC-config.xml에서 해당 변환기를 구성하십시오. SpringMVC를 사용하여 AJAX 요청을 할 때 일부 메소드는 response.getWriter (). print () 메소드를 사용합니다. 또 다른 더 나은 방법은 @ResponseBody 주석을 추가하여 맵 유형 데이터를 직접 반환하고 변환기는 자동으로 JSON 데이터 유형으로 변환하는 것입니다.