심각: 미디어 유형=응용 프로그램/json, 유형=클래스 com에 대한 MessageBodyWriter를 찾을 수 없습니다.jersey.jaxb.ToDo, genericType=class com.jersey.jaxb.하기 위해서
RESTful 웹 서비스를 작성하려고 하는데 웹 서비스를 작성했는데 웹 서비스를 가져오고 있습니다.
미디어 유형=application/json 오류에 대한 MessageBodyWriter를 찾을 수 없습니다.
나의Todo클래스:
package com.jersey.jaxb;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
import org.pojomatic.Pojomatic;
import org.pojomatic.annotations.AutoProperty;
@XmlRootElement
@XmlType(name = "todo")
@XmlAccessorType(XmlAccessType.FIELD)
@AutoProperty
public class Todo {
@XmlElement(name = "summary")
private final String summary;
@XmlElement(name = "description")
private final String description;
public String getSummary() {
return summary;
}
public String getDescription() {
return description;
}
public Todo() {
this(new Builder());
}
public Todo(Builder builder) {
this.summary = builder.summary;
this.description = builder.description;
}
@Override
public boolean equals(Object o) {
return Pojomatic.equals(this, o);
}
@Override
public int hashCode() {
return Pojomatic.hashCode(this);
}
@Override
public String toString() {
return Pojomatic.toString(this);
}
public static class Builder {
private String description;
private String summary;
public Builder summary(String summary) {
this.summary = summary;
return this;
}
public Builder description(String description) {
this.description = description;
return this;
}
public Todo build() {
return new Todo(this);
}
}
}
그리고 나의 자원:-
package com.jersey.jaxb;
import javax.ws.rs.Path;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.Produces;
import javax.ws.rs.GET;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
@Path("/todo")
public class TodoResource {
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response getTodo(){
Todo todo = new Todo.Builder().description("My Todo Object").summary("Created").build();
return Response.status(Status.OK).entity(todo).build();
}
}
My web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<display-name>MyFirstWebService</display-name>
<servlet>
<servlet-name>Jersey REST Service</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.jersey.jaxb</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey REST Service</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>
마이 라이브러리:
aopalliance-repackaged-2.4.0-b10.jar
asm-debug-all-5.0.2.jar
hk2-api-2.4.0-b10.jar
hk2-locator-2.4.0-b10.jar
hk2-utils-2.4.0-b10.jar
jackson-jaxrs-json-provider-2.2.3.jar
javassist-3.18.1-GA.jar
javax.annotation-api-1.2.jar
javax.inject-2.4.0-b10.jar
javax.servlet-api-3.0.1.jar
javax.ws.rs-api-2.0.1.jar
jaxb-api-2.2.7.jar
jersey-client.jar
jersey-common.jar
jersey-container-servlet.jar
jersey-container-servlet-core.jar
jersey-guava-2.17.jar
jersey-media-jaxb.jar
jersey-server.jar
org.osgi.core-4.2.0.jar
osgi-resource-locator-1.0.1.jar
persistence-api-1.0.jar
validation-api-1.1.0.Final.jar
Tomcat 서버에서 이 응용 프로그램을 실행하고 http://localhost:8080/MyFirstWebService/rest/todo를 실행하는 경우
다음과 같은 에러가 표시됩니다.
심각: 미디어 유형=응용 프로그램/json, 유형=클래스 com에 대한 MessageBodyWriter를 찾을 수 없습니다.jersey.jaxb.ToDo, genericType=class com.jersey.jaxb.하기 위해서.
당신은 가지고 있다jackson-jaxrs-json-provider그게 시작이야
그렇지만.....
그 유물은 여전히 Jacskon 자체에 의존하고 있다. 이 모든 유물을 포함한

그래서 Maven을 사용하고[1] 있습니다(이러한 것에 대해 걱정할 필요가 없습니다).그러니 이것들을 찾아라.
그런 다음 패키지를 web.xml에 추가하면 됩니다.
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>
com.jersey.jaxb,
com.fasterxml.jackson.jaxrs.json
</param-value>
1. 메이븐 의존관계
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
<version>2.2.3</version>
</dependency>
또는 위의 종속성에 대해 아래의 저지 "포장"을 사용하십시오.잭슨 프로바이더를 등록합니다(따라서 위와 같이 명시적으로 등록할 필요가 없습니다).Jackson 예외 맵퍼는 버전 2.17부터 엔티티 데이터 필터링을 지원합니다.
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>${jersey2.version}</version>
</dependency>
주의: 위의 종속성을 가진 제품을 등록할 필요가 없다는 사실은 Jersey의 자동 검색 기능을 통해 가능합니다.어떤 이유로 자동 검출을 무효로 했을 경우는, 명시적으로 등록해 주세요.JacksonFeature.
해결책은 모델 클래스에 인수 없는 생성자가 있는지 확인하는 것입니다.
그리고 이 의존성을 당신의 pom에 더하세요.XML:
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-moxy</artifactId>
</dependency>
나도 같은 문제가 있어서 빈 컨스트럭터를 클래스에 추가하여 해결했다.
public SandBoxClass(){} //-> solved the issue**
public SandBoxClass(Integer arg1, Integer arg2) {
this.arg1=arg1;
this.arg2=arg2;
}
pom.xml에 jersey-media-moxy 의존관계가 이미 추가된 경우.엔티티 클래스에 기본 생성자가 있는지 확인하십시오.모델 클래스에 파라애트리뷰트 컨스트럭터를 도입했을 때 이 문제가 발생하였습니다.디폴트 컨스트럭터를 추가한 것이 다시 도움이 되었습니다.
저는 등록에 도움이 되었습니다.JacksonFeature:
public class App extends ResourceConfig {
public App() {
packages("info.ernestas.simplerest");
register(new JacksonFeature()); // This magical line helped
}
}
- 라이브러리 Jax-RS 2.0 및 Jersey 2.5.1(JAX-RS-RI)만 업데이트
- json 또는 xml을 자동 생성하는 동안 Bean 개체(todo)가 문제를 일으키므로 응답이 없습니다.
답변: JAX-RS 웹 서비스를 통해 JSON 개체를 보내려는 "MessageBodyWriter not found for media type=application/json"을 가져오는 중
상기와 같이:
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-moxy</artifactId>
</dependency>
저는 다음 사항도 추가해야 했습니다.
ClientConfig config = new ClientConfig();
config.register(JacksonJsonProvider.class);
return ClientBuilder.newClient(config)
언급URL : https://stackoverflow.com/questions/29136404/severe-messagebodywriter-not-found-for-media-type-application-json-type-class
'programing' 카테고리의 다른 글
| 스프링 데이터 jpa의 saveAndFlush와 saveAndFlush의 차이 (0) | 2023.02.15 |
|---|---|
| 반응 성분 테스트를 위해 창 크기 변경을 모의하는 방법 파악 (0) | 2023.02.15 |
| Oracle Pl/SQL: XMLTYPE 노드를 통한 루프 (0) | 2023.02.15 |
| TypeError: 정의되지 않은 속성 'then'을 읽을 수 없습니다. (0) | 2023.02.15 |
| MongoDB의 replaceOne()과 updateOne()의 차이점은 무엇입니까? (0) | 2023.02.15 |