Диагноз
Я столкнулся с той же самой проблемой, и ее очень неприятная проблема, которую нужно решить.Вы не понимаете, что не так.Но я наконец понял, в чем проблема.Это не значит, что Spring не может обнаружить XForm
, нет!Spring очень хорошо создаст для вас боб XForm
.Вы можете проверить это, используя следующий код:
@Bean
public CommandLineRunner commandLineRunner(ApplicationContext ctx) {
return args -> {
System.out.println("Let's inspect the beans provided by Spring:");
String[] beanNames = ctx.getBeanDefinitionNames();
Arrays.sort(beanNames);
for (String beanName : beanNames) {
System.out.println(beanName);
}
};
}
Проблема
Настоящая проблема заключается в @RequestBody
.@RequestBody
делает (с помощью HttpMessageConverter
) то, что он сообщает контроллеру MVC создать экземпляр XForm
с помощью конструктора no-arg, а затем вызывать методы setter со значениями входящего HTTP-запроса POST,Теперь, когда @RequestBody
создает объект с помощью конструктора без аргументов, зависимости (UserRepository
, в данном случае) никогда не внедряются, и вы получаете нулевой указатель для вашего сервиса.
Вид решения
То, что вы можете попробовать сделать, это попытаться создать еще один расширенный конструктор и вызвать его из конструктора без аргументов следующим образом:
public XFrom(UserService userService){
this.userService = userService;
}
Я не уверен, будет ли это работать, но оно определенно стоитвыстрел.