Spring Boot REST API 生成 404 Not Found
Posted
技术标签:
【中文标题】Spring Boot REST API 生成 404 Not Found【英文标题】:Spring Boot REST API Generates 404 Not Found 【发布时间】:2018-12-10 08:41:09 【问题描述】:我正在尝试执行连接到 mysql (phpmyadmin) 数据库的 Spring Boot 应用程序。问题是当我尝试获取、删除或发布数据时,它会生成此消息。
"timestamp": "2018-07-02T06:36:37.000+0000",
"status": 404,
"error": "Not Found",
"message": "No message available",
"path": "/api/users"
主类:
public class App extends SpringBootServletInitializer
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application)
return application.sources(App.class);
public static void main( String[] args )
System.out.println( "Hello World!" );
SpringApplication.run(App.class, args);
依赖关系:
<dependencies>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.thymeleaf.extras</groupId>
<artifactId>thymeleaf-extras-springsecurity4</artifactId>
</dependency>
<dependency>
<groupId>com.nulab-inc</groupId>
<artifactId>zxcvbn</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>net.sourceforge.nekohtml</groupId>
<artifactId>nekohtml</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.191</version>
</dependency>
</dependencies>
Application.properties
spring.datasource.url = jdbc:mysql://localhost:3306/demo_db?useSSL=false
spring.datasource.username=root
spring.datasource.password=root
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.hibernate.ddl-auto=create
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.jpa.generate-ddl=true
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
用户控制器:
@RestController
@RequestMapping("/api")
public class UserController
@Autowired
UserRepository userRepoObject;
@GetMapping("/users")
public List<User> getAllUsers()
return userRepoObject.findAll();
@PostMapping("/users")
public User createUser(@Valid @RequestBody User userObj)
return userRepoObject.save(userObj);
@GetMapping("/users/id")
public User getUser(@PathVariable(value = "id") Long userId)
return userRepoObject.findById(userId)
.orElseThrow(() -> new ResourceNotFoundException("User", "id", userId));
@DeleteMapping("users/id")
public ResponseEntity<?> deleteUser(@PathVariable(value="id") Long userId)
User user = userRepoObject.findById(userId).orElseThrow(() -> new ResourceNotFoundException("User","id",userId));
userRepoObject.delete(user);
return ResponseEntity.ok().build();
除此之外,我的应用程序中还有 User、UserController 和 UserRepository 类。 demo_db 数据库和用户表已经在 phpmyadmin 中创建。
请帮我解决这个问题。非常感谢。
如需更多信息,请附上错误截图。
【问题讨论】:
告诉我们UserController
404 表示“找不到资源”,这意味着无法识别您的控制器类(查看启动日志输出)或请求与映射不匹配。
你的主班对我来说看起来不熟悉(这并不意味着它是错误的)。我正在为该类使用注释 SpringBootAplication 并且不扩展 SpringBootServletInitializer 并因此不覆盖方法。也许你试一试。
@Flocke 还是同样的错误。
在我的应用程序中,我使用了两个注释 SpringBootApplication 、 EnableAutoConfiguration 和 extends SpringBootServletInitializer 并且工作正常。
【参考方案1】:
将以下内容添加到您的 Main
类中:
@SpringBootApplication
@ComponentScan( "your controllers packages here", "other packages if you use them" )
@EnableJpaRepositories(basePackages = "your repo packages here")
@EntityScan(basePackages = "your entities")
如果你在其他地方定义了你的包,比如在第二个模块中,你需要手动添加它们。
【讨论】:
以上是关于Spring Boot REST API 生成 404 Not Found的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot REST API war 文件生成 404 错误
当我进行 Rest api 调用时,使用 Spring Boot 动态创建列/表