Конфигурация Джерси Не идентифицирует классы обслуживания и дао - PullRequest
0 голосов
/ 14 сентября 2018

Это мой класс конфигурации джерси

@ApplicationPath("services")
    public class JerseyApplication extends ResourceConfig{
    public JerseyApplication() {

            packages("com.ems");

            register(EmployeeService.class);
        }
    }

Здесь autowiring из employeeService дает исключение нулевого указателя

@Path("/ems")
@Component
public class EmployeeRestController {

    @Autowired
    private EmployeeService employeeService;

    @GET
    @Path("/employees")
    @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
    public List<Employee> getEmployees() {
        return employeeService.getEmployees();
    }
}

Я попробовал все в моем employeeServiceImplУ меня есть аннотация @service Тем не менее, она не работает.

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

Чтобы настроить внедрение зависимостей с помощью встроенной структуры DI (HK2), вы должны использовать AbstractBinder, как упоминалось в некоторых ответах в Внедрение зависимостей с помощью Jersey 2.0 .

@ApplicationPath("services")
public class JerseyApplication extends ResourceConfig {

    public JerseyApplication() {

        packages("com.ems");

        register(new AbstractBinder() {
            @Override
            protected void configure() {
                bind(EmployeeService.class)
                        .to(EmployeeService.class)
                        .in(Singleton.class);
            }
        });
    }
}

Во-вторых, вы не используете аннотацию @Autowired. Эта аннотация специально для весны. Для стандартной инъекции с Джерси, просто используйте аннотацию @Inject. Также удалите аннотацию @Component, поскольку это также относится к Spring.

Кроме того, если вы хотите хотите интегрировать Spring с Джерси, вам следует прочитать Почему и как использовать Spring с Джерси . Это сломает то, что вам нужно понять об интеграции двух структур.

0 голосов
/ 14 сентября 2018

Вы должны зарегистрировать контроллер, а не класс обслуживания. Пример

@ApplicationPath("services")
    public class JerseyApplication extends ResourceConfig{
    public JerseyApplication() {

            packages("com.ems");

            register(EmployeeRestController.class);
        }
    }
...