源码复现
首先创建一个springboot 项目,依赖及代码如下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jersey</artifactId>
</dependency>
package com.jersey.demo;
import org.glassfish.jersey.server.ResourceConfig;
import org.springframework.stereotype.Component;
import javax.ws.rs.ApplicationPath;
@Component
@ApplicationPath("")
public class JerseyConfig extends ResourceConfig {
public JerseyConfig(){
packages("com.jersey.demo");
}
}
package com.jersey.demo;
import org.springframework.stereotype.Controller;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
@Path("/")
@Controller
public class HelloController {
@Path("hello")
@GET
public String hello(){
return "hello";
}
}
坑1
Controller类上面必须加@path注解,若不添加,访问时会报404错误
坑2
packages("com.jersey.demo") 方法,在spring boot 2.x版本中,运行jar包时,会出现文件找不到的错误
解决方法:
(1)重写packages方法
private void packages(String path){
ClassPathScanningCandidateComponentProvider scanner = new ClassPathScanningCandidateComponentProvider(false);
scanner.addIncludeFilter(new AnnotationTypeFilter(Path.class));
this.registerClasses(scanner.findCandidateComponents(path).stream()
.map(beanDefinition -> ClassUtils
.resolveClassName(Objects.requireNonNull(beanDefinition.getBeanClassName()), this.getClassLoader()))
.collect(Collectors.toSet()));
}
(2)待续