0

我正在尝试按照没有 XML 配置的新趋势在 WebApp 的球衣控制器中自动装配 Neo4J 存储库。让它适用于 MVC 控制器,但不适用于抛出 NPE 的泽西岛。简化代码在这里。我认为这与 Neo4J 无关,因为更简单的 bean 我不相信它们会在 Jersey 控制器中自动装配。它可能在泽西配置中。下面更详细地介绍控制器类和 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);
    }
}
4

1 回答 1

0

看起来 Jersey JERSEY-2175中存在一个错误,阻止它通过包扫描找到 Spring 组件,因此您可能必须手动注册组件才能使其工作。例如

public JerseyConfig() {
    // packages("org.efurn.rest.resources");
    ...
    register(JerseyApi.class);
}
于 2013-12-30T14:42:04.343 回答