我正在使用 Springboot 和 RESTEasy 来创建一个小型的webapp,在我的Controller类中,我正在为我的Dao类做@Autowire
。每当我部署代码时,dao引用变量总是以null
值结束。我使用@Component
用于控制器和邮件应用程序类我使用了@SpringBootApplication
,在我的dao类中我也添加了@Repository
和@Service
。
请提供一些建议我到底做错了什么?
注意:如果我将其作为独立的Springboot应用程序运行,则可以正常工作。但是在JBoss服务器中部署时会出现此问题。
代码格式如下所示:在调试时,List<DataDto> dataList = dao.findData();
始终为null
,因为哪个API调用失败。
@Component
@Path("/")
public class apiController {
@Autowired
private ApiDao dao;
public void setApiDao(ApiDao dao) {
this.dao = dao;
}
@GET
@Path("/getData")
@Produces(MediaType.APPLICATION_JSON)
public List<DataDto> getDetails(){
List<DataDto> dataList = dao.findData();
return logList;
}
}
Dao类代码如下:
@Repository
@Service
public class ApiDao {
private final Logger log = LoggerFactory.getLogger(ApiDao.class);
private JdbcTemplate jdbcTemplate;
@Autowired
public ApiDao(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
public List<SystemEntity> findData() throws SystemException{
return entityList;
}
}
对于配置,我使用了以下代码,并在pom.xml中添加了所需的依赖项:
@Component
@ApplicationPath("/rest/")
public class JaxrsApplication extends Application {
}
答案 0 :(得分:0)
JBoss为RESTEasy提供内置支持。因此,在这种情况下,apiController
初始化两次:
自动装配发生在由spring初始化的实例中,但当调用被apiController
触发时,它由JBoss初始化的实例处理。
禁止JBoss初始化RESTEasy控制器。在春季启动应用程序中,在web.xml
下创建src/main/webapp/WEB-INF
并添加以下上下文参数:
<context-param>
<param-name>resteasy.scan</param-name>
<param-value>false</param-value>
</context-param>
<context-param>
<param-name>resteasy.scan.providers</param-name>
<param-value>false</param-value>
</context-param>
<context-param>
<param-name>resteasy.scan.resources</param-name>
<param-value>false</param-value>
</context-param>