自动装配Spring MVC与JERSEY Null指针异常

时间:2013-12-30 12:17:59

标签: jersey-2.0 spring-boot

我正在尝试在新的趋势没有XML配置的情况下在WebApp中的泽西控制器中自动装载Neo4J Repo。它适用于MVC控制器,但不适用于抛出NPE的泽西岛。简化代码为here。我不认为这与Neo4J有关,因为更简单的豆我不相信他们会在Jersey控制器中获得Autowired。它可能是泽西配置中的某些内容。下面更详细地介绍控制器类和Jersey配置。

MVC控制器。

@Controller
public class PersonController {


    @Autowired
    PersonRepository personRepository;

    @RequestMapping("/person")
    public @ResponseBody
    Person mvccreate() {
        Person tom = new Person("Tom");
        personRepository.save(tom);
        return personRepository.findByName("Tom");
    }
}

泽西控制器。

@Component
@Path("/person")
@XmlRootElement
public class JerseyApi {

    @Autowired
    PersonRepository personRepository; 

    @GET
    @Produces(MediaType.APPLICATION_JSON)
           public Person jerseycreate() {
           Person tom2 = new Person("Tom2");
           personRepository.save(tom2);      // --> Null Pointer Exception
           return personRepository.findByName("Tom2");
           }
}

主要的泽西配置。

@Configuration
@ComponentScan(basePackages="org.efurn")
@EnableAutoConfiguration
public class Application {


    @Bean
    public ServletRegistrationBean jerseyServlet() {
        ServletRegistrationBean registration = new ServletRegistrationBean(new ServletContainer(), "/api/*");
       registration.addInitParameter(ServletProperties.JAXRS_APPLICATION_CLASS, JerseyConfig.class.getName());
        return registration;
    }

    public static void main(String[] args) throws Exception {

        FileUtils.deleteRecursively(new File("graph.db"));

        SpringApplication.run(Application.class, args);        
        }                

}

泽西岛配置类。

public class JerseyConfig extends ResourceConfig {

    public JerseyConfig() {
        packages("org.efurn.rest.resources");
        property(ServerProperties.BV_SEND_ERROR_IN_RESPONSE, true);
        property(ServerProperties.JSON_PROCESSING_FEATURE_DISABLE, false);
        property(ServerProperties.MOXY_JSON_FEATURE_DISABLE, true);
        property(ServerProperties.WADL_FEATURE_DISABLE, true);
        register(LoggingFilter.class);
        register(JacksonFeature.class);
    }
}

1 个答案:

答案 0 :(得分:0)

看起来Jersey JERSEY-2175中存在一个错误,阻止它通过包扫描找到Spring组件,因此您可能需要手动注册组件才能使其正常工作。 E.g。

public JerseyConfig() {
    // packages("org.efurn.rest.resources");
    ...
    register(JerseyApi.class);
}