작은 REST API를 만들고 POST 메서드에 문제가있어 MediaType.APPLICATION_JSON
을 생성하고 생성합니다. 내가 POST 서버 (글래스 피쉬 4.1.1) 상태 코드 500 내부 서버 오류뿐만 아니라 다음과 같은 오류를 반환 보낼 때 : Java Jersey REST NoSuchMethodError : XMLUnmarshaller
java.lang.NoSuchMethodError: org.eclipse.persistence.oxm.XMLUnmarshaller.setNamespaceResolver(Lorg/eclipse/persistence/oxm/NamespaceResolver;)V
나는이
post를 읽고 버전
org.eclipse.persistance.moxy
을 변경했습니다. 내 문제가 해결되지 않습니다. 내가 메이븐 내 의존성을 사용
사실은 다음과 같습니다
<dependencies>
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>eclipselink</artifactId>
<version>2.5.2</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>2.26</version>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-moxy</artifactId>
<version>2.16</version>
</dependency>
</dependencies>
날이 문제를 해결 도와주세요.
편집. 내가 JSON과 POST 방법으로 내 문제를 해결
import java.net.URI;
import java.util.List;
import java.util.concurrent.ExecutorService;
import javax.validation.Valid;
import javax.ws.rs.BeanParam;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.container.AsyncResponse;
import javax.ws.rs.container.Suspended;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.GenericEntity;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;
@Path("/adverts")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class AdvertsResources {
@POST
public void addAdvert(@Suspended final AsyncResponse asyncResponse,
@Valid final Advert advert,
@Context final UriInfo uriInfo) {
executorService.submit(new Runnable() {
@Override
public void run() {
asyncResponse.resume(doAddAdvert(advert, uriInfo));
}
});
}
private Response doAddAdvert(@Valid Advert advert,
@Context UriInfo uriInfo) {
Advert newAdvert = advertService.addAdvert(advert);
String newId = String.valueOf(newAdvert.getId());
URI newUri = uriInfo.getAbsolutePathBuilder().path(newId).build();
return Response.created(newUri)
.entity(newAdvert)
.build();
}
}
@EDIT
안녕하세요, : 그것은 POST 방식의 샘플 코드입니다. 내가 무엇 :
이1) 변경 글래스 피쉬 4.1.1 4.1
2) 코드와 전체 스택을 보지 않고 종속에게
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>1.8</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-json</artifactId>
<version>1.8</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-binding</artifactId>
<version>2.26</version>
</dependency>
의견을 보내 주셔서 감사합니다. 모든 클래스를 다시 컴파일하고 종속성을 변경하려고하지만 여전히 작동하지 않습니다. 첫 번째 게시물을 편집하고 POST 메서드의 샘플 코드를 추가합니다. – atezor
@atezor'NoSuchMethodError'는 런타임 중에 만 발생한다는 '오류'입니다. 따라서 런타임시 동일한 라이브러리 (버전 포함)를 가지고 있는지 확인해야합니다. – Ravi