내용 협상 & 메시지 변환
ContentNegotiatingViewResolver
Implementation of ViewResolver that resolves a view based on the request file name or Accept header. ViewResolver는 요청 파일 이름이나 Accept 헤더를 기반으로 뷰를 해석합니다.The ContentNegotiatingViewResolver does not resolve views itself, but delegates to other ViewResolvers. By default, these other view resolve rs are picked up automatically from the application context, though they can also be set explicitly by using the viewResolvers property. Not e that in order for this view resolver to work properly, the order property needs to be set to a higher precedence than the others (the defa ult is Ordered.HIGHEST_PRECEDENCE). ContentNegotiatingViewResolver는 뷰를 자체적으로 해석하지 않고 다른 ViewResolver에 의뢰합니다.기본적으로 이 다른 보기 해상도는 프로그램 상하문에서 자동으로 선택됩니다. 비록viewResolvers 속성을 사용하여 현시적으로 설정할 수 있습니다.이 보기 해상도가 정상적으로 작동하려면 order 속성을 다른 속성보다 높은 우선 순위로 설정해야 합니다(기본 속성은 Orde red.HIGHEST_PRECEDENCE).
This view resolver uses the requested media type to select a suitable View for a request. The requested media type is determined through the configured ContentNegotiationManager. Once the requested media type has been determined, this resolver queries each delegate view resolver for a View and determines if the requested media type is compatible with the view's content type). The most compatible view is returned. 이 보기 해상도는 요청한 미디어 형식을 사용하여 요청에 맞는 보기를 선택합니다.구성된 ContentNegotiationManager를 통해 요청된 미디어 유형을 결정합니다.요청한 미디어 형식을 확인하면 이 해상도는 모든 위탁 보기 해상도에 보기를 조회하고 요청한 미디어 형식이 보기의 내용 형식과 호환되는지 확인합니다.가장 호환되는 보기를 되돌려줍니다.
Additionally, this view resolver exposes the defaultViews property, allowing you to override the views provided by the view resolvers. Note that these default views are offered as candidates, and still need have the content type requested (via file extension, parameter, or Accept header, described above). 또한 이 보기 해상도는 defaultViews 속성을 공개하여 보기 해상도가 제공하는 보기를 덮어쓸 수 있습니다.이러한 기본 보기는 후보자로 제공되며, 요청한 내용 형식이 있어야 합니다. (파일 확장자, 파라미터 또는 헤더를 통해 위에서 설명한 바와 같이)
For example, if the request path is/view.html, this view resolver will look for a view that has the text/html content type (based on the ht ml file extension). A request for/view with a text/html request Accept header has the same result. 예를 들어, 요청 경로가/view인 경우.html, 이 보기 해상도는text/html 내용 유형(html 파일 확장명 기반)을 가진 보기를 찾습니다.text/html request Accept 헤더가 있는/view 요청은 같은 결과를 가지고 있습니다.
이로써 내용 협상은 컨트롤러 선택, Context-Type 설정에 대한 보기 사용 방법이다
자주 쓰는 게 메시지 변환기도 있어요.
package emcat
import global
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.context.ApplicationContext
import org.springframework.context.annotation.Configuration
import org.springframework.context.event.ContextRefreshedEvent
import org.springframework.context.event.EventListener
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter
import org.springframework.web.servlet.view.ContentNegotiatingViewResolver
@Configuration
open class EventListener {
@Autowired var mWebApplicationContext: ApplicationContext? = null
@EventListener fun onStarted(event: ContextRefreshedEvent) {
val requestMappingHandlerAdapter = mWebApplicationContext!!.getBean(RequestMappingHandlerAdapter::class.java);
val messageConverters = requestMappingHandlerAdapter.getMessageConverters();
val sb = StringBuilder(1024);
sb.append("Spring ${ messageConverters.size } :
");
for (mc in messageConverters) {
sb.append(mc::class.java.getCanonicalName());
sb.append("
");
}
global.log(sb.toString())
}
}
/* Output:
Spring 7 :
org.springframework.http.converter.ByteArrayHttpMessageConverter
org.springframework.http.converter.StringHttpMessageConverter
org.springframework.http.converter.ResourceHttpMessageConverter
org.springframework.http.converter.ResourceRegionHttpMessageConverter
org.springframework.http.converter.xml.SourceHttpMessageConverter
org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter
org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter
*/
<> 레코드:
@ResponseBody 메모는 Spring에 반환된 객체를 리소스로 클라이언트에게 보내고 이를 클라이언트가 받아들일 수 있는 표현 형식으로 변환해야 한다고 알려 줍니다.더 구체적으로 말하자면, Dispatcher Servlet은 요청의 Accept 헤더 정보를 고려하여 클라이언트에게 필요한 설명 형식의 메시지 변환기를 찾을 것이다.
import org.springframework.http.converter.StringHttpMessageConverter
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter
...
@Configuration
@EnableWebMvc
open class ServletConfig : WebMvcConfigurer {
override fun configureContentNegotiation(configurer: ContentNegotiationConfigurer) {
configurer.defaultContentType(MediaType.APPLICATION_JSON_UTF8)
}
override fun configureMessageConverters(converters: MutableList>) {
val stringmc = StringHttpMessageConverter(Charsets.UTF_8)
stringmc.setWriteAcceptCharset(false)
converters.add(stringmc)
val jsonmc = MappingJackson2HttpMessageConverter()
converters.add(jsonmc)
global.log(" ")
}
}
/*
Spring 2 :
org.springframework.http.converter.StringHttpMessageConverter
org.springframework.http.converter.json.MappingJackson2HttpMessageConverter
*/
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.