Spring Поддержка аннотации Jax-RS Restfull

У меня есть следующие файлы классов и web.xml. Поддерживает ли Spring Framework аннотации jax-rs, такие как @PATH, @PUT, @Consumes... и т.д.

Другими словами, я могу использовать @PATH вместо @RequestMapping

Джава:

import org.springframework.stereotype.Controller;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;

@Controller
@Path("/register")
public class RegisterServices {
    @PUT
    @Path("/create")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces({"application/json"})
    public Response create(@Context HttpServletRequest requestContex,
                           @HeaderParam("Authorization") String authorization, 
                           String xMsisdn, String param) {}
}

web.xml

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <servlet-mapping>
        <servlet-name>Jersey REST Service</servlet-name>
        <url-pattern>/rest/*</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>Jersey REST Service</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

Ответы

Ответ 1

Нет, вы не можете использовать аннотации javax.ws.* в spring. Вы можете использовать что-то вроде resteasy с spring. Это довольно легко. Если вам нужно, я могу привести пример. (Джерси и CXF также имеют хорошие реализации JAX-RS.)

AFAIK Springsource не имеет понятия для реализации JAX-RS. Поэтому, если вы хотите использовать функции, описанные в JAX-RS, вы не получите их непосредственно из spring. Но вы можете создать веб-сервис для отдыха с помощью spring. Это другая история. A question был найден на SO на этом.

Update

В зависимости от ответа PaulNUK ниже я должен уточнить свой ответ. Конец дня отдыха - это спецификация, и кому-то нужно реализовать его на первом месте.

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

Поэтому вы никогда не сможете использовать spring реализованную аннотацию JAX-RS.

Ответ 2

Просто добавьте аннотации JAX-RS (я использую Джерси 2) в класс, аннотирую этот класс с @Component, чтобы сделать его Spring bean, и у вас есть полная поддержка JAX-RS с помощью Spring инъекции зависимостей.

Итак, Spring не изобретает колесо, реализуя сам JAX-RS, но очень легко интегрируется с Джерси, например.

Вот пример загрузки Spring:

http://spring.io/blog/2014/11/23/bootiful-java-ee-support-in-spring-boot-1-2

Ответ 3

Если вы хотите создать веб-службы, используя только инфраструктуру Spring, тогда Spring предоставляет Spring MVC. Spring MVC имеет свой собственный набор аннотаций. Напр. "@RequestMapping". Spring MVC даже не придерживается принципов JAX-RS.

Существуют различные структуры с открытым исходным кодом (например, Джерси), которые поддерживают "JAX-RS" и могут быть интегрированы с Spring.

Однако, на всякий случай, если вы хотите сравнить Spring MVC с Джерси, то ниже это сравнение. Я лично поддерживаю Джерси над Spring MVC как Spring MVC первоначально не предназначен для веб-сервисов, а для приложения пользовательского интерфейса.

  • Те же относительные пути в нескольких @Controllers не поддерживаются
  • @ExceptionHandler ориентирован на контроллер
  • Стандартное согласование содержимого не может реагировать на фиксированный тип ответа (SPR-6937).
  • JSR 303 bean проверка не применяется в @Controllers (SPR-6928, запланировано на 3.1)
  • Отформатированные ответы (т.е. дата) не работают с использованием аннотаций форматера Spring
  • Вы не можете вернуть bean из обработчика исключений и ожидать, что он будет автоматически сериализован в xml или json на основе входящего заголовка accept.

НТН...