【发布时间】:2020-05-06 19:09:44
【问题描述】:
我刚开始学习Springboot。一切正常,直到我遇到这个问题。我已经搜索了每个 StackOverFlow 主题和整个互联网,但没有一个能解决我的问题。我尝试以正确的方式设置 Content-Type 和 Accepts ,但还是不行。
用户控制器:
package com.example.carnet.api;
import com.example.carnet.model.User;
import com.example.carnet.services.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/carnet/user")
public class UserController {
private final UserService userService;
@Autowired
public UserController(UserService userService) {
this.userService = userService;
}
@GetMapping("/all")
public List<User> getUsers() {
return userService.getUsers();
}
@GetMapping(path = "/{email}")
public User getUserByEmail(@PathVariable("email") String email) {
return userService.getUserByEmail(email);
}
@GetMapping("/validate")
public boolean validateUser(@RequestParam("email") String email, @RequestParam("password") String password) {
return userService.validateUser(email, password);
}
@PostMapping("/add")
public void addUser(@RequestBody User user) {
userService.addUser(user);
}
@DeleteMapping(path = "/{id}")
public void deleteUserById(@PathVariable("id") int id) {
userService.deleteUserById(id);
}
@PutMapping
public void updatePassword(@RequestBody User user) {
userService.updatePassword(user);
}
}
用户模型:
package com.example.carnet.model;
import com.fasterxml.jackson.annotation.JsonManagedReference;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import java.sql.Date;
import java.util.List;
@Table(name = "users")
@Entity
public class User {
@Id
private int user_id;
private String email;
private String password;
private String name;
private String surname;
private Date birth_date;
@OneToMany(mappedBy = "user")
@JsonManagedReference
private List<Rental> rentals;
public User() {
}
public int getUser_id() {
return user_id;
}
public void setUser_id(int user_id) {
this.user_id = user_id;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSurname() {
return surname;
}
public void setSurname(String surname) {
this.surname = surname;
}
public Date getBirth_date() {
return birth_date;
}
public void setBirth_date(Date birth_date) {
this.birth_date = birth_date;
}
}
使用 Postman 发出 POST 请求后出错:
{
"timestamp": "2020-05-06T19:01:16.498+0000",
"status": 415,
"error": "Unsupported Media Type",
"message": "Content type 'application/json;charset=UTF-8' not supported",
"path": "/carnet/user/add"
}
已解决:从用户模型中删除 @JsonManagedReference 解决了问题!
【问题讨论】:
-
你能展示你的模型类吗?您是否在代码流中的任何地方使用@JsonManagedReference?
-
如果您在 Postman 中设置
Content-type标头,请尝试在application/json;和charset=UTF-8之间放置一个空格 -
我可以在出租属性中看到@JsonManagedReference,请您删除并尝试
-
@GaneshSreeju 删除 JsonManagedReference 有效!您能否提供更多上下文和/或解释为什么会造成这个问题?我应该在所有课程中删除它吗?我还在其他模型上使用 JsonBackReference。谢谢提前!
标签: json spring-boot postman httprequest rest