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.
НТН...