Spring MVC ошибка Initializing Spring DispatcherServlet 'dispatcherServlet'
2022-06-30 21:44:26.766 INFO 7140 --- [nio-8081-exec-2] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' 2022-06-30 21:44:26.766 INFO 7140 --- [nio-8081-exec-2] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' 2022-06-30 21:44:26.767 INFO 7140 --- [nio-8081-exec-2] o.s.web.servlet.DispatcherServlet : Completed initialization in 1 ms
Ошибка происходит при попытке вызова post или get запроса из postman.
package Controller;
import dto.UserDto;
import exception.ValidationException;
import lombok.AllArgsConstructor;
import lombok.extern.log4j.Log4j2;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.NoHandlerFoundException;
import services.UserService;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
*
*/
@RestController
@RequestMapping(path = "/users")
@AllArgsConstructor
@Log4j2
public class UserController {
private final UserService userService;
@PostMapping("/save")
public UserDto saveUser(@RequestBody UserDto userDto) throws ValidationException {
log.info("Handling save users: " + userDto);
return userService.saveUser(userDto);
}
@GetMapping("/findAll")
public List<UserDto> findAllUsers() {
log.info("Handling find all users request");
return userService.findAll();
}
@PostMapping
public UserDto findByLogin(@RequestParam String login) {
log.info("Handling find by login request");
return userService.findByLogin(login);
}
@DeleteMapping("/delete/{id}")
public ResponseEntity<Void> deleteUser(@PathVariable Long id) {
log.info("Handling delete user request");
return ResponseEntity.ok().build();
}
@ExceptionHandler(NoHandlerFoundException.class)
public void handleNotFoundError(HttpServletResponse response, NoHandlerFoundException ex) {
log.error("URL not found exception: " + ex.getRequestURL());
}
}
package app.demo_page.dto;
import lombok.Builder;
import lombok.Data;
@Data
@Builder
public class UserDto {
private Long id;
private String name;
private String login;
private String email;
@Override
public String toString() {
return "UserDto{" +
"id=" + id +
", name='" + name + '\'' +
", login='" + login + '\'' +
", email='" + email + '\'' +
'}';
}
}
package app.demo_page.entity;
import lombok.Data;
import javax.persistence.*;
@Data
@Table(name = "users")
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String login;
private String email;
}
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.1</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demo_page</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo_page</name>
<description>demo_page</description>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>6.1.0.Final</version>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.4.0</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>2.7.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.7.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
> 2022-06-30 22:21:58.318 INFO 12196 --- [ main] app.demo_page.DemoPageApplication : Starting DemoPageApplication using Java 17.0.1 on DESKTOP-IIQ99R6 with PID 12196 (D:\GoogleDisk\Программирование\Java\demo_page\target\classes started by Mixail in D:\GoogleDisk\Программирование\Java\demo_page)
2022-06-30 22:21:58.320 INFO 12196 --- [ main] app.demo_page.DemoPageApplication : No active profile set, falling back to 1 default profile: "default"
2022-06-30 22:21:58.942 INFO 12196 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8081 (http)
2022-06-30 22:21:58.955 INFO 12196 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2022-06-30 22:21:58.955 INFO 12196 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.64]
2022-06-30 22:21:59.023 INFO 12196 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2022-06-30 22:21:59.023 INFO 12196 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 670 ms
2022-06-30 22:21:59.052 WARN 12196 --- [ main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'userController' defined in file [D:\GoogleDisk\Программирование\Java\demo_page\target\classes\app\demo_page\Controller\UserController.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'defaultUserService' defined in file [D:\GoogleDisk\Программирование\Java\demo_page\target\classes\app\demo_page\services\DefaultUserService.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'app.demo_page.repository.UserRepository' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
2022-06-30 22:21:59.053 INFO 12196 --- [ main] o.apache.catalina.core.StandardService : Stopping service [Tomcat]
2022-06-30 22:21:59.062 INFO 12196 --- [ main] ConditionEvaluationReportLoggingListener :
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2022-06-30 22:21:59.075 ERROR 12196 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter :
***************************
APPLICATION FAILED TO START
***************************
Description:
Parameter 0 of constructor in app.demo_page.services.DefaultUserService required a bean of type 'app.demo_page.repository.UserRepository' that could not be found.
Action:
Consider defining a bean of type 'app.demo_page.repository.UserRepository' in your configuration.
Process finished with exit code 1
Собственно вопрос: в какую сторону копать?
Ответы (2 шт):
Честно говоря не удалось воспроизвести проблему c твоим кодом заменим UserDto на свои и userService на свои заглушки.
Нужно побольше деталей.
- Пример запроса
- pom.xml
- чуть больше логов
Возможно, вам не хватает @Service, @Repository или @Component аннотации к вашим соответствующим классам реализации.