我正在尝试按照没有 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);
}
}