1. 소개
이 기사는 주로 SpringMVC 백엔드 서비스를 사용하여 구성을 통해 여러 반환 값 유형 (XML, JSON, HTML, Excel)을 지원하는 방법을 소개합니다.
여기에서 코드는 springboot, 다운로드 주소를 사용합니다 : https://github.com/xiagn825/springboot-todolist/tree/springboot-contentnegotiation
2. 기본 개념
2.1 httpheader의 컨텐츠 유형과 수락 설정의 차이
수락 : 인터페이스가 클라이언트에게 반환 할 데이터 형식
CURL -Header 'accept : application/json'http : // localhost : 8080/todo
Content-Type : 클라이언트가 서버로 보낸 데이터 형식
curl -x put -header 'content -type : application/json'-d '{ "title": "주말 일정", "내용": "sleep"}'http : // localhost : 8080/todo2.2 SpringMVC에서 출력을 생성하는 두 가지 방법
1) 서버가 RESTFUL 메소드를 사용하여 클라이언트의 AJAX 또는 기타 서버 요청에 대한 데이터 만 제공하는 경우 @ResponseBody는 일반적으로 반환을 식별하는 데 사용됩니다. 현재 Spring은 httpmessageconverter를 사용하여 반환 된 객체를 필요한 형식으로 포맷합니다.
2) 프리젠 테이션 계층 (예 : HTML)을 제공 해야하는 경우 SpringMVC는 ViewResolver를 사용하여 반품을 처리합니다.
때로는 응용 프로그램이 둘 다를 제공해야합니다
2.3 SpringMVC 출력 형식 결정
여러 번 여러 시스템 또는 다중 터미널을 지원하려면 다른 표현에서 동일한 데이터를 출력해야합니다.
SpringMVC는 ContentNegotationStrategy를 사용하여 사용자가 얻으려는 데이터 형식을 결정합니다.
ContentNegotationStrategy는 사용자가 반환하려는 데이터 종류를 식별하기 위해 세 가지 방법을 사용합니다.
아래 구성을 참조하십시오
@overridepublic void configeRecontentNegotiation (contentNegotiationConfigurer configure) {configurer.favorPathextension (false) .favorParameter (true) .parametername ( "mediaType") .defaultContentType (mediaType.application_json) .Medipe ( "xml", ", mediaType.application_xml) .mediatepe ( "html", mediaType.text_html) .mediatepe ( "json", mediaType.application_json);}위의 구성을 프로젝트의 webmvcconfig에 추가합니다. 이는 URL 접미사의 규칙을 닫고 요청 매개 변수 규칙을 열고 요청 매개 변수를 'mediaType'으로 설정하는 것을 의미합니다. 기본 반환 형식은 JSON이며 XML 및 HTML 리턴도 지원합니다.
이 세 가지 구성 요소는 다른 형식의 출력을 반환하는 열쇠입니다.
2.4 RequestMappings
2.4.1 RequestMappingHandlerMpapping
우리가 일반적으로 봄에 사용하는 것은 RequestMappingHandlerMpapping입니다. RequestMappingInfo에 따르면 일치 조건을 개선합니다. 전체 검색 프로세스는 다음과 같습니다.
ABSTRACTHANDLERMEDODMAPPED 구현 인터페이스 gethandlerinternal
1. UrlPathHelper를 사용하여 요청에 해당하는 경로를 찾으십시오.
2. 경로에 해당하는 핸드 레저 메드를 찾으십시오
2.1 urlmap requestMappingInfo에서 일치하는 조건을 찾으십시오
2.2 일치 조건이 동등한 값으로 발견되면 매치 조건에 추가하십시오.
2.3 일치하는 조건이 없으면 일치하는 모든 핸드 레저드의 RequestMappingInfo를 사용하십시오.
2.4 경기를 정렬하고, 우선 순위가 가장 높은 일치를 취하고, 그것이 가장 높은 우선 순위인지 확인하십시오.
2.5 : 조건이 일치하고 조건이 일치하지 않는 두 상황을 캡슐화하십시오.
3. Bean의 인스턴스가 ContentNegotiationManager에 저장되도록 핸드 메모드를 캡슐화하여 MinityPE의 일치 조건을 비교하여 프레임 워크가 가장 적절한 처리 방법과 일치 할 수 있도록합니다.
2.5 httpmessageconverter
2.5.1 기본 메시지 변환기
SpringMVC는 기본적으로 다음 httpmessageconverters를로드합니다.
bytearrayhttpmessageconverter 변환 바이트 변환 어레이트 ressstringhttpmessageconverter 변환 stringsresourcehttpmessageconverter 변환 org.springframework.core.io.resource 모든 유형의 옥트 스트림 스트림 류 스테이거 콘버터 변환 javax.xml.transform.sourceformhttpmessageconverter는 다중 발행 <문자열, 문자열> .jaxb2rootelementhttpmessageconverters java 객체를 XML로/로 변환하는 경우 (classpontjackson2httpmestpmestpmestpmestpmestpmestpmessaGegeGegeGegegegegeconverters java 객체를 변환합니다. Jackson 2는 클래스 경로에 존재합니다) Mapping JacksonhttpMessageConverter는 JSON을 변환합니다 (Jackson이 클래스 경로에있는 경우에만 추가) AtomfeedhttpMessageConverter 변환 Atom Feeds (Rome이 클래스 경로에 참석 한 경우에만 추가) RSSCHANNOLHTTPMESSAGECONVERTER RSS PESTS RSS PESTS (Classputts에 추가).
반환하면 @ResponseBody에 의해 식별되면 프레임 워크는 httpmessageConverter를 사용하여 리턴 값을 처리합니다. 기본 XMLCoverter는 특히 유용하지 않으며 엔티티 오브젝트의 @xmlRootElement 주석에 따라 다릅니다. 그다지 편리하지 않습니다. 따라서 보조 클래스 라이브러리를 소개하고 리턴 된 객체를 XML 형식으로 직접 처리 할 수 있도록 MessageConverter를 사용자 정의합니다.
Gradle Import Library
컴파일 그룹 : 'org.springframework', 이름 : 'spring-oxm', 버전 : '4.3.9. Release'compile Group :'com.thoughtworks.xstream ', 이름 :'xstream ', 버전 :'1.4.10 '
구성
@overridepublic void configuremessageconverters (list <httpmessageconverter <?> converters) {converters.add (createxmlhttpmessageconverter ()); super.configuremessageconverters (converters);} private httpmessageconverter <bood> createxmlhttpmessageconverter () {marshallinghttpmessageconverter xmlconverter = new MarshallinghttpmessageConverter (); xstreammarshaller xstreammarshaller = new xstreammarshaller (); XMLCONVERTER.SETMARSHALLER (XSTREAMMARSHALLER); XMLCONVERTER.SETUNMARSHALLER (XSTREAMMARSHALLER); XMLConverter를 반환합니다;}2.6 해상도보기
2.6.1 페이지 렌더 (프리 마커)
페이지로 돌아 가야하는 경우 적절한 ViewResolver로 그림을 그려야하며 여기에서 프리 마커를 페이지 엔진으로 사용합니다.
Gradle Import Library
컴파일 ( "org.springframework.boot : Spring-Boot-Starter-Freemarker")
요약
위는이 기사의 전체 내용입니다. 이 기사의 내용에 모든 사람의 연구 나 작업에 대한 특정 참조 가치가 있기를 바랍니다. 궁금한 점이 있으면 의사 소통을 위해 메시지를 남길 수 있습니다. Wulin.com을 지원 해주셔서 감사합니다.