Я получаю исключение NullPointerException в приведенном ниже коде на самом контроллере. Перед тем, как пойти в сервисный класс. Я не мог найти, где я ошибаюсь. Как я новичок в весне.
java.lang.NullPointerException: Cannot invoke "com.sarathUniversity.service.StudentService.createStudentResponse(com.sarathUniversity.request.CreateStudentRequest)" because "this.stdService" is null
2023-05-30T13:13:08.197+05:30 INFO 11192 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
2023-05-30T13:13:08.197+05:30 INFO 11192 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2023-05-30T13:13:08.198+05:30 INFO 11192 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 1 ms
2023-05-30T13:22:44.633+05:30 WARN 11192 --- [l-1 housekeeper] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Thread starvation or clock leap detected (housekeeper delta=9m44s455ms305µs600ns).
2023-05-30T13:22:55.734+05:30 ERROR 11192 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: java.lang.NullPointerException: Cannot invoke "com.sarathUniversity.service.StudentService.createStudentResponse(com.sarathUniversity.request.CreateStudentRequest)" because "this.stdService" is null] with root cause
java.lang.NullPointerException: Cannot invoke "com.sarathUniversity.service.StudentService.createStudentResponse(com.sarathUniversity.request.CreateStudentRequest)" because "this.stdService" is null
at com.sarathUniversity.controller.StudentController.createStudent(StudentController.java:17) ~[classes/:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:207) ~[spring-web-6.0.9.jar:6.0.9]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:152) ~[spring-web-6.0.9.jar:6.0.9]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) ~[spring-webmvc-6.0.9.jar:6.0.9]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:884) ~[spring-webmvc-6.0.9.jar:6.0.9]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797) ~[spring-webmvc-6.0.9.jar:6.0.9]
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-6.0.9.jar:6.0.9]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1081) ~[spring-webmvc-6.0.9.jar:6.0.9]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:974) ~[spring-webmvc-6.0.9.jar:6.0.9]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1011) ~[spring-webmvc-6.0.9.jar:6.0.9]
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914) ~[spring-webmvc-6.0.9.jar:6.0.9]
На картинке ниже вы можете увидеть значения отладки. В этом
StudentRepository = null
AdressRepository = null
Передача содержимого тела в метод публикации, а также я могу видеть их в консоли отладки.
http://localhost:8080/api/student/create
{
"firstName":"sarathdaa",
"lastName": "Kumarda",
"email": "[email protected]",
"street": "Pall,Tvk,256",
"city": "chennai"
}
ОБНОВЛЯТЬ Пробовал @Autowired через StudentService @Service над классом StudentService
Поделился ссылкой на источник ниже.
Пожалуйста, помогите мне исправить это. Заранее спасибо. Если требуется более подробная информация, пожалуйста, прокомментируйте ниже.
Но IDE показывает, что «внедрение поля не рекомендуется» при размещении @Autowired над StudentService stdService
В сообщении логера четко сказано, что because "this.stdService" is null. Вы можете отлаживать и видеть в этой строке, является ли stdService нулевым или нет.
Также обратитесь к ответу @Nandish Chauhan
Да с этим пробовал. все еще не работал. А также обновил это в моем вопросе




Вы не используете Внедрение зависимостей (DI). Есть несколько способов сделать эту инъекцию в архитектуре Spring.
@RestController
@RequestMapping("/api/student")
public class StudentController extends CreateStudentRequest
{
private final StudentService stdService;
// a constructor so that the Spring container can inject a StudentService.
public StudentController(StudentService stdService) {
this.stdService = stdService;
}
// ...
}
Кроме того,
extends CreateStudentRequest в классе StudentController.@Service к вашему классу StudentService.Я разветвил ваш код и вот результат:
Извините, это не сработало. Сервер остановлен с ошибкой.
The dependencies of some of the beans in the application context form a cycle: ┌──->──┐ | studentController defined in file [E:\IntellijProjects\UniversityMonolithicApp\target\classes\com\sarathUniversity\controller\StudentController.class] └──<-──┘ Action: Relying upon circular references is discouraged and they are prohibited by default. Update your application to remove the dependency cycle between beans. As a last resort, it may be possible to break the cycle automatically by setting spring.main.allow-circular-references to true.@ Sarath14Kumar Sarath14Kumar это сработало, но теперь вы получаете еще одну ошибку, и сообщение об ошибке объясняет, что не так. У вас есть циклическая зависимость, которую вам нужно исправить. Есть ли у StudentService контроллер в качестве зависимости? Этого не должно быть.
Да, это сработало для меня. Теперь столкнулся с той же проблемой в классе StudentService. java.lang.NullPointerException: Cannot invoke "com.sarathUniversity.repository.AdressRepository.save(Object)" because "this.adressRepository" Стоит ли мне сделать то же самое здесь?
addrs = adressRepository.save(addrs); в этой строке
Почему я должен делать это, когда доступен @AutoWired. Могу я знать
См. stackoverflow.com/q/40620000/2039546
Тут может быть две проблемы
Попробовал с вашим мнением, но не получилось. Обновил вопрос теперь с вашим.
вы расширяете CreateStudentRequest из StudentService, а также расширяете StudentController из CreateStudentRequest, а затем автоматически связываете StudentService. это не работает так, как эта весенняя загрузка. Я не знаю, почему вы расширяете CreateStudentRequest из StudentService, также вам нужно аннотировать свой репозиторий с помощью @Repository и автоматически подключить их в сервисе.
Ваш
StudentServiceне подключен автоматически, поэтому значение по умолчанию становитсяnull, и это вызывает проблему.