我正在尝试在新的趋势没有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);
}
}
答案 0 :(得分:0)
看起来Jersey JERSEY-2175中存在一个错误,阻止它通过包扫描找到Spring组件,因此您可能需要手动注册组件才能使其正常工作。 E.g。
public JerseyConfig() {
// packages("org.efurn.rest.resources");
...
register(JerseyApi.class);
}