java - 在 Jersey + Spring 框架中使用 @Autowired 时出现 NullPointerException

标签 java spring dependency-injection jersey autowired

我创建了一个简单的服务来一起尝试 Jersey 和 Spring 框架。我正在使用核心Spring(不是Spring Boot)。 Jersey 框架在没有 Spring 的情况下也能正常工作。一旦我添加 Spring 注释,@Autowired 就无法按预期工作。

MyResource.java

@Component
@Path("myresource")
public class MyResource {

    @Autowired
    private AdditionService add;

    @GET
    @Path("/sum/{firstNumber}/{secondNumber}")
    @Produces(MediaType.APPLICATION_JSON)
    public Answer getSum(@PathParam("firstNumber") int firstNumber,
                         @PathParam("secondNumber") int secondNumber) {

        return add.performAction(firstNumber,secondNumber);
    }
}

AdditionService.java

@Component
public class AdditionService {

    @Autowired
    Answer ans;

    public Answer performAction (int first, int second) {
        ans.setAnswer(first+second);
        return ans;
    }
}

Answer.java

@Component
public class Answer {
    private int answer = 200;
    public Answer() {}
    public Answer(int answer) {
        this.answer = answer;
    }
    public int getAnswer() {
        return answer;
    }
    public void setAnswer(int answer) {
        this.answer = answer;
    }
}

AppConfig.java

@Configuration
@ComponentScan(basePackageClasses = {Answer.class,AdditionService.class})
public class AppConfig {}

错误

org.apache.catalina.core.NamingContextListener.addResource naming.jmxRegistrationFailed

空指针错误

24-Feb-2020 16:54:30.205 SEVERE [http-nio-8080-exec-6] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [Jersey Web Application] in context with path [/RESTAPIJersey_war] threw exception [java.lang.NullPointerException] with root cause
    java.lang.NullPointerException
        at org.example.company.resources.MyResource.getSum(MyResource.java:27)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)

最佳答案

这些应该被注释为@Service而不是@Component,然后您可以从一个或多个继承@Component注释的@Controller(甚至@Restcontrollers)访问这些服务,您可以在其中指定一个 @RequestMapping(方法=RequestMethod.GET,路径=“/用户”) 在类级别的方法上

关于java - 在 Jersey + Spring 框架中使用 @Autowired 时出现 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60384656/

相关文章:

java - 如何在 JUnit4 中获取上下文

java - 将文件读入列表?

Spring Kafka 和一次性交付保证

java - spring WebApplicationInitializer 配置多个servlet

java - 我可以让 Jenkins 每小时检查一次 SVN 是否有变化吗?

c# - MVVM 中的后台加载和构造函数注入(inject)

java - App Engine Java 高级查询类型

java - 通过 Jacob 在 Java 应用程序和 Microsoft 应用程序之间进行同步

typescript - 为 Dynamics CRM 编写可测试的 TypeScript 类

java - 工厂类 vs Spring DI