当前位置: 首页 > 知识库问答 >
问题:

SpringMVC Rest易集成豆子没有注入控制器类

冷俊健
2023-03-14

我正在从事一个有springmvc2.5.*的项目。我集成了RESTeasy来创建restfulendpoint。我用@controller定义了一个控制器类。我有一个bean,它应该被注入这个控制器,但似乎没有被注入,因此当bean变量用于控制器rest方法时,它抛出一个空指针异常。

我已经将这些添加到了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>

自定义类 I 从 resteasy 应用程序类扩展来定义应用程序路径:

@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类如下所示:

@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 中定义了员工服务 bean。只是它不会反映在员工控制器豆中。我不确定是否甚至创建了员工控制器豆。但是我能够成功调用终结点。如果将员工服务 Bean 放入 MVC 控制器中,则 Bean 启动工作正常。例如:

  <bean name="/testDetail.html" class="com.test.package.controller.TestDetailController" parent="baseController">
    <property name="employeeService " ref="employeeService "/>
  </bean>

但不是在RestController中。对这种行为有什么想法吗?我这里缺少任何配置吗?

共有1个答案

燕智
2023-03-14

首先,您应该将雇员服务bean定义如下,

<bean id="employeeService" class="com.test.package.service.EmployeeService">
    --------
</bean>

在web.xml中加载上面的config xml文件

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/XML_FILE_PATH/XML_FILE_NAME.xml</param-value>
</context-param>

然后,您可以使用employeeServicebean

初始化employeeServicebean后,使用@PostConstruct注释调用此方法

@PUT
@PostConstruct
@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;
}
 类似资料:
  • 问题内容: 我想基于从客户端传递的String参数注入一个bean。 我希望基于传递的参数注入报表实例。任何帮助将不胜感激。提前致谢 问题答案: 使用工厂方法模式: 当您使用以下命令调用控制器时,Spring可以创建报告类型: 但是,它非常笨拙,并且每次添加新报告类型时都需要进行修改。如果报告类型列表已修复,则可以。但是,如果您计划添加越来越多的类型,这将是一个更可靠的实现: 通过此实现,添加新的

  • GCP入口的以下注释等效于什么?我试图使用一个自定义的nginx模板,但我找不到以下注释的参考。在github的回答中,他们使用的是AWS,但我需要使用GCP来实现这一点。 我正在使用ingress类nginx 我正在尝试使用入口控制器在GCP Kubernetes集群中进行入口TCP SSL终止。 我想要来自<代码>https://example.com:1234重定向到

  • /////////////////////个人控制器///////////////////////////////// ///////////////////个人/////////////////////////////////// ///////////////////PersondaoImpl/////////////////////////// /////////////人(模型)/////

  • 我有Spring acpect,它会在我的应用程序中的每个控制器方法周围触发。在方面的主体中,我想访问方法签名中声明的所有请求参数。有没有一种简单的方法可以避免反思?

  • 在一个项目中,当我将代码切换到主分支时,我开始发现一些错误。其中之一是加载异常错误。整个日志还显示了一个No Suck method异常错误。 我也想发布控制器,但因为它超过600行,我不确定这是否有帮助,我已经确保控制器中的每个方法都是公共的,唯一的私有部分是我使用的变量和图表。