【发布时间】:2020-04-19 10:46:24
【问题描述】:
我正在开发一个包含 spring mvc 2.5.* 的项目。我已经集成了 RESTeasy 来创建 restful 端点。我用@Controler 定义了一个控制器类。我有一个 bean 应该被注入到这个控制器,但它似乎没有被注入,因此当 bean 变量用于控制器休息方法时它会抛出一个空指针异常。
我已将这些添加到 web.xml
<context-param>
<param-name>resteasy.servlet.mapping.prefix</param-name>
<param-value>/rest</param-value>
</context-param>
<servlet>
<servlet-name>resteasy-servlet</servlet-name>
<servlet-class>
org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher
</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.test.package.controller.MyApplication</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>resteasy-servlet</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
自定义类我从resteasyApplication类扩展来定义应用路径:
@ApplicationPath("/rest")
public class MyApplication extends Application {
@Override
public Set<Class<?>> getClasses() {
final Set<Class<?>> classes = new HashSet<>();
// register root resource
classes.add(EmployeeController.class);
return classes;
}
}
我有一个 servlet.xml,它定义了工作正常的 mvc 控制器 bean: 例如:
<bean name="/testDetail.html" class="com.test.package.controller.TestDetailController" parent="baseController">
<property name="testService" ref="testService"/>
</bean>
我的控制器类如下所示:
@Controller
@Path("/employee")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class EmployeeController {
private static final Log LOG = LogFactory.getLog(EmployeeController.class);
private EmployeeService employeeService; // This doesn't get initiated.
@PUT
@Path("/update/{empId}")
public Response updateEmp(@PathParam("empId") Long empId, EmpRequest request) {
Response response = null;
employeeService.update(request); // NULL POINTER THROWN HERE, employeeService is null
return response;
}
public EmployeeService getEmployeeService () {
return employeeService ;
}
public void serEmployeeService (EmployeeService employeeService ) {
this.employeeService = employeeService ;
}
}
这里我在 servlet.xml 中添加了另一个 bean,
<bean id="employeeController " class="com.test.package.controller.EmployeeController">
<property name="employeeService " ref="employeeService "/>
</bean>
在一个单独的xml 中定义了employeeService bean。只是它不会反映在employeeController bean 中。我不确定是否甚至创建了employeeController bean。但我能够成功调用端点。如果将employeeService bean 放在MVC 控制器中,bean 启动工作正常。例如:
<bean name="/testDetail.html" class="com.test.package.controller.TestDetailController" parent="baseController">
<property name="employeeService " ref="employeeService "/>
</bean>
但不在 RestController 中。关于这种行为的任何想法。我在这里缺少任何配置吗?
【问题讨论】:
标签: java spring spring-mvc resteasy