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