Как иметь аннотацию @PATCH для JAX-RS?



JAX-RS имеет аннотации для HTTP-глаголов, таких как GET (@GET) и POST (@POST), но нет @PATCH Примечание. Как я могу иметь аннотацию для PATCH http-команду?



что-то вроде следующего:



@PATCH
public Response someCode() {
// Code to handle the request
}
474   6  

6 ответов:

Я получил ответ здесь.

просто нужно будет определить пользовательскую аннотацию патча, что означает, что вам нужно будет написать патч.java файл со следующим кодом:

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@HttpMethod("PATCH")
public @interface PATCH {
}

импорт the пакет, содержащий патч.java и тогда вы можете использовать его, как и другие аннотации метода HTTP:

@PATCH
@Path("/data/{keyspace}")
@Produces({ "application/json" })
public void patchRow(@PathParam("keyspace") String keyspace, String body) 
throws Exception

я использовал этот @ PATCH, чтобы отправить JSON в мою службу REST.

С помощью JAX-RS 2.1?

JAX-RS 2.1 добавил @PATCH к списку поддерживаемых методов HTTP.

Используя Чванство?

при использовании чванство в документе API-интерфейс REST, вы могли бы использовать уже существующие @PATCH аннотация определена в .

используя Джерси и Dropwizard?

Dropwizard определяет a @PATCH аннотация в io.dropwizard.jersey пакета.

написать свой собственный

если вышеупомянутые подходы не работают для вас, вы можете написать свой собственный @PATCH аннотация:

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@HttpMethod("PATCH")
public @interface PATCH { }

The @HttpMethod аннотация используется для связывания имени метода HTTP с аннотацией, создавая то, что спецификация JAX-RS вызывает обозначение метода ресурса.

свой @PATCH аннотации работа штраф в размере в развязность.

в Джерси это будет работать просто отлично, но при использовании клиента Джерси для тестирования вашего класса ресурсов, вы получите исключения:

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);
}

и вам нужно также добавить еще одну зависимость Maven,jersey-apache-connector и jersey-test-framework-provider-external см. Джерси док

Если вы используете dropwizard, содержит io.dropwizard.jersey.PATCH. Это именно то, что вам нужно.

JAX-RS API 2.0.1 не имеет патча. Но, глядя на JAX-RS API 2.2-SNAPSHOT code, патч теперь включен. Код такой:

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@HttpMethod(HttpMethod.PATCH)
@Documented
public @interface PATCH {
}

здесь ссылке.

вы можете использовать те же коды для исправления, пока 2.2 не выйдет. Для HttpMethod.Патч, просто замените его на "патч".

Если вы используете CXF 3.1.2 или более позднюю версию (источник), вы можете использовать org.apache.cxf.jaxrs.ext.PATCH.

Comments

    Ничего не найдено.