[英]Spring boot 2.2.5 release Getting 404 not found error
我正在嘗試在線執行托管在 tomcat 服務器上的 Spring 引導應用程序。 問題是當我嘗試獲取、刪除或發布數據時,用戶 controller 會生成此消息。
{
"timestamp": "2021-01-24T06:45:42.144+00:00",
"status": 404,
"error": "Not Found",
"message": "",
"path": "/tool/api/v1/users"
}
奇怪的問題是,當我在本地運行服務器http://localhost:8080/api/v1/users
我得到數據但是當我嘗試托管戰爭文件並點擊端點http://31.134.12.356:9080/tool/api/v1/users
我最終得到了上面的錯誤。
我的用戶 Controller
@RequestMapping("/api/v1")
@RestController
public class UserController {
@Autowired
private UserRepository userRepository;
@Autowired
private RoleRepository roleRepository;
@GetMapping("/users")
public Iterable<User> getAllUsers() {
return userRepository.findAll();
}
@GetMapping("/users/{id}")
public User getUserById(@PathVariable("id") String id) {
return userRepository.findById(id).get();
}
@GetMapping("/users/{username}")
public User getUserByUsername(@PathVariable("username") String username) {
return userRepository.findByUsername(username).get();
}
@PostMapping(value = "/users")
public ResponseEntity<Object> saveUser(@RequestBody SaveUserRequest userRequest) {
//save user details
User user = new User(userRequest.getUsername(),
userRequest.getDisplayName(), userRequest.getEmail(), userRequest.getIdentityProvider());
Set<String> strRoles = userRequest.getRole();
Set<Role> roles = new HashSet<>();
if (strRoles == null) {
Role userRole = roleRepository.findByName(ERole.ROLE_USER)
.orElseThrow(() -> new RuntimeException("Role is not found."));
roles.add(userRole);
} else {
strRoles.forEach(role -> {
switch (role) {
case "admin":
Role adminRole = roleRepository.findByName(ERole.ROLE_ADMIN)
.orElseThrow(() -> new RuntimeException("Role is not found."));
roles.add(adminRole);
break;
case "mod":
Role modRole = roleRepository.findByName(ERole.ROLE_MODERATOR)
.orElseThrow(() -> new RuntimeException("Role is not found."));
roles.add(modRole);
break;
default:
Role userRole = roleRepository.findByName(ERole.ROLE_USER)
.orElseThrow(() -> new RuntimeException("Role is not found."));
roles.add(userRole);
}
});
}
user.setRoles(roles);
user.setId(java.util.UUID.randomUUID().toString());
user.setLastLoggedOn(new Date());
userRepository.save(user);
return ResponseEntity.ok(user);
}
}
奇怪的問題是我有其他端點並且它們工作正常,用戶 rest api 是未找到的。 我在 api 中添加了工具,因為它是戰爭文件的名稱,我在 tomcat 上運行了多個戰爭文件。
Servlet 初始化器
public class ServletInitializer extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(MonitoringToolApplication.class);
}
}
主class
@SpringBootApplication
@ComponentScan({ "com.example.tool.demo.controller"})
@EntityScan(basePackages = "com.example.tool.demo.model")
public class MonitoringToolApplication {
public static void main(String[] args) {
SpringApplication.run(MonitoringToolApplication.class, args);
}
}
我的 pom 文件
<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.2.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example.tool</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>Example</name>
<description>example</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<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>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<!-- <scope>provided</scope>-->
</dependency>
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>8.2.2.jre8</version>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.6</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Application.properties 文件
#Example Tool connection string
spring.datasource.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.datasource.url=jdbc:sqlserver://localhost;databaseName=example_tools
spring.datasource.username=sa
spring.datasource.password= user2k!!__
## Hibernate Properties
# The SQL dialect makes Hibernate generate better SQL for the chosen database
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.SQLServer2012Dialect
# Hibernate ddl auto (create, create-drop, validate, update)
spring.jpa.hibernate.ddl-auto = update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql = true
請幫我解決這個問題。 提前謝謝了。
在服務器端部署項目時,排除 pom.xml 文件中嵌入的 tomcat
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.