Jersey类路径扫描限制
可执行jar布局的更改意味着,Jersey的类路径扫描中的限制现在会影响可执行jar文件以及可执行war文件。要变通解决此问题,您希望由Jersey扫描的类应打包在jar中,并作为依赖项包含在BOOT-
INF / lib中。然后,应将Spring Boot启动器配置为在启动时解压缩这些jar,以便Jersey可以扫描其内容。
这是一个已知的问题,有一个开放的拉那不是合并尚未请求。我建议您参考此问题,其中提到一些解决方法。
解决方法很少
配置Boot的Maven插件以解压缩包含该软件包的jar
使用以下解决方法
jersey 1:import java.util.Map;import javax.annotation.PostConstruct;import javax.ws.rs.Path;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.ApplicationContext;import org.springframework.stereotype.Component;import com.sun.jersey.api.core.DefaultResourceConfig;@Componentpublic class RestApplication extends DefaultResourceConfig { private static final Logger log = LoggerFactory.getLogger(RestApplication.class); public RestApplication() { getFeatures().put("com.sun.jersey.api.json.POJOMappingFeature", true); } @Autowired ApplicationContext appCtx; @PostConstruct public void setup() { log.info("Rest classes found:"); Map<String,Object> beans = appCtx.getBeansWithAnnotation(Path.class); for (Object o : beans.values()) { log.info(" -> " + o.getClass().getName()); getSingletons().add(o); } }}and @Autowired RestApplication restApplication; @Bean public ServletRegistrationBean jersey() { ServletRegistrationBean bean = new ServletRegistrationBean(); bean.setServlet(new ServletContainer(restApplication)); bean.addInitParameter("com.sun.jersey.api.json.POJOMappingFeature", "true"); bean.setUrlMappings(Arrays.asList("/rest/*")); return bean; }jersery2:import java.util.Map;import javax.annotation.PostConstruct;import javax.ws.rs.ApplicationPath;import javax.ws.rs.Path;import org.glassfish.jersey.server.ResourceConfig;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.ApplicationContext;import org.springframework.stereotype.Component;import com.sun.jersey.api.core.ResourceConfig;@Component@ApplicationPath("/rest")public class JerseyConfig extends ResourceConfig { private static final Logger log = LoggerFactory.getLogger(JerseyConfig.class); @Autowired ApplicationContext appCtx; @PostConstruct public void setup() { log.info("Rest classes found:"); Map<String,Object> beans = appCtx.getBeansWithAnnotation(Path.class); for (Object o : beans.values()) { log.info(" -> " + o.getClass().getName()); register(o); } }}


