Java 클래스에 대한 메시지 작성기를 사용하지 않습니다.
저는 JAX-RS를 처음 사용하고 json을 출력하는 샘플 애플리케이션을 작성했습니다. 하지만 예외가 발생합니다. 내 코드는 다음과 달라집니다.
@Path("/hello")
public class HelloWorldService {
@GET
@Path("/query/{artist_id}")
@Produces("application/json")
public Data getMsg(@PathParam("artist_id") int artist_id,
@QueryParam("from") int from,
@QueryParam("to") int to) {
Data d=new Data();
d.setName("Mateen");
d.setRoll(77);
return d;
}
}
내 데이터는 POJO 클래스입니다.
@XmlRootElement
public class Data {
private int roll;
private String name;
public int getRoll() {
return roll;
}
public void setRoll(int roll) {
this.roll = roll;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
예외가 발생합니다.
javax.ws.rs.WebApplicationException:
com.sun.jersey.api.MessageException:
A message body writer for Java class com.abc.data.Data,
and Java type class com.abc.data.Data,
and MIME media type application/json was not found
내가 도대체 뭘 잘못하고있는 겁니까?
마침내 내 대답을 찾았습니다. 나는 추가했다
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-json</artifactId>
<version>1.8</version>
</dependency>
내 pom.xml 파일에. 그런 다음 추가했습니다
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>
내 web.xml 파일에 모든 것이 잘 작동합니다. 위의 코드를 사용하지 않습니다.
나는 다음 항아리를 추가하고 그것은 나를 위해 일했습니다.
- jackson-core-asl-1.9.2.jar
- jackson-mapper-asl-1.9.2.jar
- jackson-xc-1.9.2.jar
- jackson-jaxrs-1.9.2.jar
약간의 추가입니다. web.xml 디스크립터 파일을 사용하지 않는 경우에는 같이 프로그래밍 방식으로 POJOMappingFeatire를 활성화 할 수 있습니다.
...
final ResourceConfig rc = new PackagesResourceConfig("com.test.resources");
final Map<String, Object> config = new HashMap<String, Object>();
config.put("com.sun.jersey.api.json.POJOMappingFeature", true);
rc.setPropertiesAndFeatures(config);
...
Maven 사용자 : 다음 두 가지 진술이 필요합니다.
<!-- For Jersey -->
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet-core</artifactId>
<version>2.15</version>
</dependency>
<!-- For JSON -->
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>2.15</version>
</dependency>
XML 출력은 기본적으로 지원됩니다. 더 많은 것이 필요하지 않습니다.
Jersey 1.8로 작업하면서 JSON 객체를 생성하고 클라이언트 측에서 REST API를 사용하는 동안 동일한 오류가 발생했습니다.
서버 측에서 문제가 발생하면 클래스 경로에 jersey-json.jar을 올바르게 포함하고 다른 답변에서 언급 한 것처럼 web.xml에 올바른 init-param을 매핑했는지 확인하십시오.
클라이언트 측
당으로 저지 1.8 문서 , 어떻게 클라이언트 측에 POJO JSON 매핑 기능을 사용하려면 다음 코드 쇼 :
ClientConfig clientConfig = new DefaultClientConfig();
clientConfig.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING,Boolean.TRUE);
Client client = Client.create(clientConfig);
동일한 문제가 발생했습니다. Java 유형, 클래스 java.lang.String 및 MIME 미디어 유형 인 application / json에 대한 메시지 본문 작성기를 찾을 수 없습니다.
문제는 javax.ws.rs.ext.MessageBodyWriter 클래스가
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>2.22.2</version>
</dependency>
다음과 같은 클래스와 충돌했습니다.
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-client</artifactId>
<version>1.19.1</version>
</dependency>
참조 URL : https://stackoverflow.com/questions/13108161/a-message-body-writer-for-java-class-not-found
'ProgramingTip' 카테고리의 다른 글
Heroku https 사양을 만드는 방법은 무엇입니까? (0) | 2021.01.05 |
---|---|
한 번에 여러 목록을 반복하는 가장 좋은 방법은 무엇입니까? (0) | 2021.01.05 |
C ++는 음수 저장이있는 'for'루프에서 충돌합니다. (0) | 2021.01.05 |
바이트 배열에서 비트 맵을 만드는 방법은 무엇입니까? (0) | 2021.01.05 |
Objective-C의 NSString indexOf (0) | 2021.01.05 |