org.springframework.web.reactive.기능.지원되지 않는 MediaType 예외:내용 유형 'text/xml';charset=UTF-8' 바디 지원 안 됨유형
Java 11, SpringBoot 2, WebFlux, WebClient 및 Jackson 사용
XML, 내용 유형: 'text/xml;charset='을(를) 반환하는 웹 서비스 끝점을 사용하기 위해 Spring Web Client를 사용하려고 합니다.UTF-8'
프로젝트의 pom.xml에서 Jackson XML 종속성:
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.9.9</version>
</dependency>
외부 API에 대한 요청을 트리거하고 응답을 구축하는 WebClient 코드:
WebClient.builder()
.baseUrl(url)
.build()
.get()
.uri(builder.toUriString(), 1L)
.accept(TEXT_XML)
.header(HttpHeaders.CONTENT_TYPE, MediaType.TEXT_XML_VALUE)
.acceptCharset(Charset.forName("UTF-8"))
.exchange()
.flatMap(x -> x.bodyToMono(ServiceResponse.class))
.flatMap(x -> buildResponse(x));
Service Response 클래스(단순 POJO):
public class ServiceResponse {
private String ack;
private String version;
private String timestamp;
// .. getters and setters
결과 오류:
org.springframework.web.reactive.기능.지원되지 않는 MediaType 예외:내용 유형 'text/xml';charset=UTF-8' 바디 지원 안 됨= com.sample.service.model을 입력합니다.org.springframework.web.reactive의 ServiceResponse.기능.BodyExtractors.lambda$read WithMessageReaders$12(BodyExtractors.java:201) ~[spring-webflux-5.1.8].java.base/java.util.Optional. or ElseGet(Optional.java:369) ~[na:na] at org.springframework.web.reactive.기능.BodyExtractors.read with MessageReaders(BodyExtractors.java:197) ~[spring-webflux-5.1.8]org.springframework.web.reactive에서 RELEASE.jar:5.1.8.RELEASE].기능.BodyExtractors.lambda$~Mono$2(BodyExtractors.java:85) ~[spring-webflux-5.1.8].org.springframework.web.reactive에서 RELEASE.jar:5.1.8.RELEASE].function.client.DefaultClientResponse.body(DefaultClientResponse).java:95) ~[spring-webflux-5.1.8].org.springframework.web.reactive에서 RELEASE.jar:5.1.8.RELEASE].function.client.기본 클라이언트 응답.bodyToMono(기본 클라이언트 응답).java:113) ~[spring-webflux-5.1.8].RELEASE.jar:5.1.8.RELEASE]
응답 유형을 적절하게 소비하는 방법:내용 유형 'text/xml';charset=UTF-8'?
Jackson XML은 Spring Framework에서 현재 지원되지 않습니다. 전용 문제 참조.그 사이에 잭스비를 사용할 수 있습니다.Jaxb2XmlEncoder그리고.Jaxb2XmlDecoder.
추가하기
.accept(MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML)
나를 위해 일했습니다.미디어 유형 HTTP 규격에 정의된 인터넷 미디어 유형을 나타냅니다.참고 : https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/http/MediaType.html
봄 webflux에서 WebTestClient를 사용하여 tc를 작성하려고 할 때 이 오류가 발생했습니다.장치 테스트는 아래 섹션에 나와 있습니다.
@Test
public void testGetJobSummariesResBody() throws Exception{
List<JobSummary> responseBody =
testClient
.get().uri("<uri-name>")
.accept(MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML)
.header(APPNAME_HEADER, "<header-name>")
.exchange()
.expectStatus().isOk()
.expectBodyList(JobSummary.class)
.returnResult()
.getResponseBody();
assertNotNull(responseBody.get(0).getJobType());
assertNotEquals(0,responseBody.size());
}
"평판/텍스트"를 반환하려고 했지만 개체가 json 형식으로 해결되고 있을 때(따라서 텍스트가 아님) 비슷한 경우가 있었습니다.스프링이 응답 내용 유형과 본문 사용에 대한 검증을 수행하고 있었던 것 같습니다.저의 실제 반응은 이렇습니다.
Mono.just(quote.getQuote())
.flatMap(s -> ServerResponse.ok()
.contentType(MediaType.TEXT_PLAIN)
.syncBody(s)
);
또한 허용 가능한 것은 다음과 같습니다.
Mono.just(jsonQuote)
.flatMap(s -> ServerResponse.ok()
.contentType(MediaType.APPLICATION_JSON)
.syncBody(s)
);
의 경우 이었습니다 였습니다.Acceptheader은 XML이었습니다를(를) 이었습니다.
:MediaType.APPLICATION_JSON문제를 해결했고 서버는 JSON을 반환하기 시작했습니다.
Unsupported MediaTypeException을 혼동할 경우 또 다른 상황이 발생합니다.http/80과 https/443을 모두 듣는 재생 api를 가정해 보겠습니다.그러나 http를 통해 제공되는 콘텐츠가 없도록 구성되어 있습니다.대신 내용 유형 텍스트/html의 일부 html 내용이 포함된 HTTP 301 리디렉션 메시지를 반환합니다.기본적으로 WebClient는 301 리디렉션을 따르지 않고 대신 반환된 html 메시지를 가정 클래스로 구문 분석합니다.이렇게 하면 분명히 실패하고 지원되지 않는 MediaTypeException 예외가 발생합니다.이것은 포스트맨이 기본적으로 301 리디렉션을 따르고 완전히 투명한 방식으로 수행한다는 사실로 인해 더욱 혼란스러울 수 있습니다.http 요청을 통해 예상되는 내용을 얻을 수 있다는 인상을 남깁니다.
해결책: https 요청을 사용합니다.
언급URL : https://stackoverflow.com/questions/57033268/org-springframework-web-reactive-function-unsupportedmediatypeexception-content
'programing' 카테고리의 다른 글
| EPLus Excel 사용 - 셀 좌측 상단의 Excel 오류 확인 무시 또는 녹색 태그 제거 방법 (0) | 2023.10.11 |
|---|---|
| WordPress 홈 페이지에 주석 표시 (0) | 2023.10.11 |
| CSS 스타일시트는 어떤 순서로 재정의됩니까? (0) | 2023.10.11 |
| 동일한 mariaDB는 PHP 7.4에 FAT FREE가 적용된 PHP 7.1보다 훨씬 느리게 삽입됨 (0) | 2023.10.11 |
| 변수가 여러 문자열 값과 같지 않은지 확인하는 더 간단한 방법은? (0) | 2023.10.11 |