[SPRING] 스프링 부트 1.5.2를 사용하여 Jersey 엔드 포인트 인터페이스의 구현을 삽입하는 방법?
SPRING스프링 부트 1.5.2를 사용하여 Jersey 엔드 포인트 인터페이스의 구현을 삽입하는 방법?
Spring Boot 1.5.2에서 Jersey 웹 서비스 만이 될 웹 서비스를 포함하는 대형 웹 애플리케이션을 축소하고 있습니다. 웹 서비스에는 이미 Apache Wink에서 구현 된 완전한 JAX-RS 주석 세트가 있으므로 Spring Rest 대신 Spring + Jersey를 사용하기로 결정했습니다. 이 스프링 - 저지 - 샘플 응용 프로그램이 참조로 사용되는 것을 발견했습니다. 현재 작업하고있는 애플리케이션과 샘플의 가장 큰 차이점은 내 엔드 포인트 정의가 인터페이스와 구현으로 나뉘어져 있다는 것입니다.
내 pom.xml 다음 추가 :
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jersey</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
저의 새로운 Jersey Config는 다음과 같습니다 :
package com.example.configuration;
import org.glassfish.jersey.server.ResourceConfig;
import com.example.EndpointImpl;
import org.springframework.stereotype.Component;
@Component
public class JerseyConfiguration extends ResourceConfig {
public JerseyConfiguration() {
registerEndpoints();
}
private void registerEndpoints() {
register(EndpointImpl.class);
}
}
그럼 다음 Application.java 있습니다 :
package com.example;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;
@SpringBootApplication
public class Application extends SpringBootServletInitializer{
public static void main(String[] args) {
new Application().configure(new SpringApplicationBuilder(Application.class)).run(args);
}
}
엔드 포인트는 다음과 같이 인터페이스와 구현으로 정의됩니다 (빼기).
public interface Endpoint {
@GET
@Produces({MediaType.APPLICATION_JSON})
public Response getHello(@Context ServletContext sc, @Context HttpServletRequest req, @Context HttpHeaders httpHeaders) ;
}
@Path("")
@Component
public class EndpointImpl implements Endpoint {
@Override
public Response getHello(@Context ServletContext sc, @Context HttpServletRequest req,
@Context HttpHeaders httpHeaders) {
return Response.ok("hello").build();
}
}
애플리케이션을 시작할 때 매핑 서블릿 'com.example.configuration.JerseyConfiguration'을 [/ *]로 보내는 메시지를 포함하여 Tomcat이 시작되었다는 메시지가 표시됩니다. 그러나 웹 브라우저로 갈 때 404 Not Found 오류가 발생합니다. GET 정의가 선택되는 것처럼 보이지 않습니다.
해결법
-
==============================
1.이 문제는 § 3.6 Annotation Inheritance의 JAX-RS 스펙에서 설명합니다.
이 문제는 § 3.6 Annotation Inheritance의 JAX-RS 스펙에서 설명합니다.
중요한 항구를 강조했습니다. 왜 그것이 당신을 위해 일하지 않는지 분명해야합니다. EndpointImpl에서 @Context 어노테이션을 반복했기 때문에 "수퍼 클래스 또는 인터페이스 메소드의 모든 주석이 무시됩니다." 여기에는 @GET이 포함됩니다. 결국 궁극적으로 엔드 포인트에 @METHOD가 필요하므로 엔드 포인트가 등록되지 않습니다.
blockquote의 마지막 단락까지, 당신은 그것을 따를 것인지의 여부를 선택할 수 있습니다. 나는 방금 그것을 완전성을 위해 던져 넣었다.
-
==============================
2.당신의 application.yml (.properties)은 어떻게 생겼을까요?
당신의 application.yml (.properties)은 어떻게 생겼을까요?
Spring MVC 디스패처 서블릿 용과 Jersey 디스패처 서블릿 용으로 두 개의 경로 매핑을 선언해야 할 수도 있습니다. 같은 것 :
application.yml
... # Spring MVC dispatcher servlet path. Needs to be different than Jersey's to enable/disable Actuator endpoints access (/info, /health, ...) server.servlet-path: / # Jersey dispatcher servlet spring.jersey.application-path: /api ...
이제 / api / .....에서 Jersey 엔드 포인트에 액세스 할 수 있어야합니다.
나는 2016 년 4 월에 다시 게시 한 블로그 게시물에서 이것을 다뤘습니다 : Spring Boot, Jersey, Swagger 및 Docker를 사용하는 마이크로 서비스
-
==============================
3.더 최근의 Spring Boot / Spring MVC + Jersey 버전에서 무엇인가가 변경되지 않았다면 Jersey의 Endpoint를 인식하도록 Spring Boot를 얻으려면 Jersey의 ResourceConfig를 확장하는 추가 @Component로 이것을 등록해야합니다 :
더 최근의 Spring Boot / Spring MVC + Jersey 버전에서 무엇인가가 변경되지 않았다면 Jersey의 Endpoint를 인식하도록 Spring Boot를 얻으려면 Jersey의 ResourceConfig를 확장하는 추가 @Component로 이것을 등록해야합니다 :
@Component public class JerseyExampleConfig extends ResourceConfig { public JerseyExampleConfig() { register(EndpointImpl.class); } }
from https://stackoverflow.com/questions/43266904/how-to-use-spring-boot-1-5-2-to-inject-implementations-of-jersey-endpoint-interf by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Java DSL을 사용하여 성공적인 ftp 전송 후 파일 이동 (0) | 2019.02.26 |
---|---|
[SPRING] Eclipse의 Maven 프로젝트`org.springframework는 대상 경로에서 유형으로 해석 될 수 없습니다. ' (0) | 2019.02.26 |
[SPRING] application.properties에서 jpa utf-8 인코딩 설정 (0) | 2019.02.26 |
[SPRING] 봄 부팅시 속성 파일에서 제공되지 않으면 자리 표시 자 값을 건너 뛰는 방법은 무엇입니까? (0) | 2019.02.26 |
[SPRING] 빈 작성시 빌드시 예외가 발생 함 (0) | 2019.02.26 |