我有一個 Spring Boot Hibernate Postgres 應用程式:https ://github.com/TRahulSam1997/hibernate-spring-postgresql-project
一切都構建了,應用程式運行了,但是當我進行任何 API 呼叫時,我得到一個 404 錯誤。我無法弄清楚我做錯了什么。
application.properties檔案
spring.datasource.url=jdbc:postgresql://localhost:5432/users
spring.datasource.username=postgres
spring.datasource.password=root
spring.jpa.show-sql=true
## Hibernate Properties
# The SQL dialect makes Hibernate generate better SQL for the chosen database
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect
# Hibernate ddl auto (create, create-drop, validate, update)
spring.jpa.hibernate.ddl-auto = update
server.servlet.context-path=/api/v1/
主要的:HibernateSpringPostgresProjectApplication.java
package com.example.HibernateSpringPostgreSQLProject;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class HibernateSpringPostgresProjectApplication {
public static void main(String[] args) {
SpringApplication.run(HibernateSpringPostgresProjectApplication.class, args);
}
}
模型:Users.java
package model;
import javax.persistence.*;
@Entity
@Table(name = "users")
public class Users {
private long userId;
private String firstName;
private String lastName;
private String userName;
private String email;
public Users() {
// super();
}
public Users(String firstName, String lastName, String userName, String email) {
// super();
this.firstName = firstName;
this.lastName = lastName;
this.userName = userName;
this.email = email;
}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
// @Column(name = "id", nullable = false)
public long getUserId() {
return userId;
}
public void setUserId(long userId) {
this.userId = userId;
}
@Column(name = "first_name", nullable = false)
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
@Column(name = "last_name", nullable = false)
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
@Column(name = "user_name", nullable = false)
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
@Column(name = "email_address", nullable = false)
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "User [userId=" userId ", firstName=" firstName ", lastName=" lastName ", userName=" userName ", email=" email "]";
}
}
控制器:UsersController
package controller;
import exception.ResourceNotFoundException;
import model.Users;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import repository.UsersRepository;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@RestController
//@RequestMapping("/v1")
public class UsersController {
@Autowired
private UsersRepository usersRepository;
// get users
@GetMapping("/users")
public List<Users> getAllUsers() {
return this.usersRepository.findAll();
}
// get user by id
@GetMapping("/user/{id}")
public ResponseEntity<Users> getUserById(@PathVariable(value = "id") Long userId) throws ResourceNotFoundException {
Users user = usersRepository.findById(userId)
.orElseThrow(() -> new ResourceNotFoundException("User with this id not found:: " userId));
return ResponseEntity.ok().body(user);
}
// save user
@PostMapping("/users")
public Users createUser(@Validated @RequestBody Users user) {
return usersRepository.save(user);
}
// update user
@PutMapping("/users/{id}")
public ResponseEntity<Users> updateUser(@PathVariable(value = "id") Long userId,
@Validated @RequestBody Users userDetails) throws ResourceNotFoundException {
Users user = usersRepository.findById(userId)
.orElseThrow(() -> new ResourceNotFoundException("User with this id not found:: " userId));
user.setEmail(userDetails.getEmail());
user.setFirstName(userDetails.getFirstName());
user.setLastName(userDetails.getLastName());
return ResponseEntity.ok(this.usersRepository.save(user));
}
//delete user
@DeleteMapping("/users/{id}")
public Map<String, Boolean> deleteUser(@PathVariable(value = "id") Long userId) throws ResourceNotFoundException {
Users user = usersRepository.findById(userId)
.orElseThrow(() -> new ResourceNotFoundException("User with this id not found:: " userId));
this.usersRepository.delete(user);
Map<String, Boolean> response = new HashMap<>();
response.put("deleted", Boolean.TRUE);
return response;
}
}
Jpa存盤庫:UsersRepository
package repository;
import model.Users;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface UsersRepository extends JpaRepository<Users, Long> {
}
當我通過 Postman 發出 POST 請求時,出現以下錯誤:
帖子正文:
{
"firstName": "John",
"lastName": "Doe",
"userName": "JohnDoe",
"email": "[email protected]"
}
錯誤:
{
"timestamp": "2022-04-19T00:31:39.464 00:00",
"status": 404,
"error": "Not Found",
"path": "/api/v1/users"
}
我會很感激任何幫助!
uj5u.com熱心網友回復:
如錯誤中所述,您正在請求 api /api/v1/users,而在控制器方法中,它只是@GetMapping "/users"嘗試/api/v1在控制器級別添加,例如@RequestMapping("/api/v1")
uj5u.com熱心網友回復:
嘗試取消注釋以下行:
//@RequestMapping("/v1")
并將發布請求發送到 /v1/users/
如果您想將“api”添加到 url,只需更改為:
@RequestMapping("/api/v1")
并記住將郵遞員中的 url 更改為 /api/v1/users
uj5u.com熱心網友回復:
應用程式屬性
server.servlet.context-path=/api/v1/
方法url路徑
v1/users
獲取網址
/api/v1/v1/users
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/459043.html
標籤:爪哇 春天 PostgreSQL 弹簧靴 休眠
上一篇:如何在作為影像的所有用戶帖子的每個檔案名之前添加URL鏈接?
下一篇:為什么當我們使用getReference()和remove()時,getReference()會命中資料庫并導致SELECT陳述句
