ProgramingTip

Java 클래스에 대한 메시지 작성기를 사용하지 않습니다.

bestdevel 2021. 1. 5. 21:16
반응형

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

반응형