JAX-RS에 대한 @PATCH 어노테이션을 갖는 방법은 무엇입니까?
JAX-RS에는 GET
( @GET
) 및 POST
( @POST
) 와 같은 HTTP 동사 에 대한 @PATCH
어노테이션 이 있지만 어노테이션 이 없습니다 . PATCH
HTTP 동사에 대한 주석을 어떻게 가질 수 있습니까?
다음과 같은 것 :
@PATCH
public Response someCode() {
// Code to handle the request
}
나는 여기에 답을 얻었다 .
사용자 지정 패치 주석을 정의하기 만하면 됩니다. 즉, 다음 코드 로 PATCH.java 파일 을 작성해야 합니다.
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@HttpMethod("PATCH")
public @interface PATCH {
}
PATCH.java가 포함 된 패키지를 가져 오면 다른 HTTP 메서드 주석처럼 사용할 수 있습니다.
@PATCH
@Path("/data/{keyspace}")
@Produces({ "application/json" })
public void patchRow(@PathParam("keyspace") String keyspace, String body)
throws Exception
이 @PATCH를 사용하여 REST 서비스에 JSON을 전송했습니다.
JAX-RS 2.1을 사용하십니까?
@PATCH
지원되는 HTTP 메소드 목록에 JAX-RS 2.1이 추가되었습니다 .
Swagger를 사용하십니까?
Swagger 를 사용하여 REST API를 문서화 할 때 패키지에 @PATCH
정의 된 기존 주석을 사용할 수 있습니다 io.swagger.jaxrs
.
Jersey와 Dropwizard를 사용하십니까?
Dropwizard 는 패키지에 @PATCH
주석을 정의 io.dropwizard.jersey
합니다.
직접 작성
위에서 언급 한 접근 방식이 작동하지 않는 경우 고유 한 @PATCH
주석을 작성할 수 있습니다 .
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@HttpMethod("PATCH")
public @interface PATCH { }
@HttpMethod
주석이 무엇 JAX-RS 사양 통화 작성, 주석으로 HTTP 메소드의 이름을 연결하는 데 사용되는 리소스 방법 부호를 .
자체 @PATCH
주석은 Swagger에서 잘 작동합니다 .
Jersey에서는 잘 작동하지만 Jersey Client를 사용하여 리소스 클래스를 테스트 할 때 예외가 발생합니다.
java.net.ProtocolException: Invalid HTTP method: PATCH
클라이언트 속성을 설정하여 이에 대한 해결 방법이 있습니다.
HttpUrlConnectorProvider.SET_METHOD_WORKAROUND
그러나 기다리면 다음 예외가 발생합니다.
javax.ws.rs.ProcessingException: java.net.ProtocolException: HTTP method PATCH doesn't support output
따라서 Apache HTTP 클라이언트를 사용하도록 쉽게 구성 할 수있는 Jersey 버전 2.10을 사용하여 Apache HTTP 클라이언트 라이브러리로 변경하는 것 외에 다른 방법은 없습니다 JerseyTest
..
@Override
protected void configureClient(ClientConfig config) {
config.register(CustomJacksonJsonProvider.class);
ConnectorProvider connectorProvider = new ApacheConnectorProvider();
config.connectorProvider(connectorProvider);
}
그리고 당신은 또 다른 메이븐 종속성을 추가, 필요 jersey-apache-connector
및 jersey-test-framework-provider-external
참조 저지 문서를
JAX-RS API 2.0.1에는 PATCH가 없습니다. 그러나 JAX-RS API 2.2-SNAPSHOT 코드를 살펴보면 PATCH가 포함됩니다. 코드는 다음과 같습니다.
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@HttpMethod(HttpMethod.PATCH)
@Documented
public @interface PATCH {
}
여기에 링크가 있습니다.
2.2가 나올 때까지 같은 코드를 구제에 사용할 수 있습니다. HttpMethod.PATCH의 경우 "PATCH"로 바꾸십시오.
If you are using CXF 3.1.2 or later (source), you can use org.apache.cxf.jaxrs.ext.PATCH
.
참고URL : https://stackoverflow.com/questions/17897171/how-to-have-a-patch-annotation-for-jax-rs
'program story' 카테고리의 다른 글
API 보안 : SSL 및 HTTP 기본 인증과 서명 (0) | 2020.11.21 |
---|---|
모바일 사파리 : 입력 필드의 Javascript focus () 메서드는 클릭으로 만 작동합니까? (0) | 2020.11.21 |
console.log 대신 angular의 $ log를 사용하는 이유는 무엇입니까? (0) | 2020.11.21 |
Python의 asyncio 모듈을 사용하여 동시 작업을 올바르게 생성하고 실행하는 방법은 무엇입니까? (0) | 2020.11.21 |
RecyclerView.Adapter의 onBindViewHolder 내에 OnClickListener를 추가하는 것이 왜 나쁜 습관으로 간주됩니까? (0) | 2020.11.21 |