【问题标题】:Postman SpringBoot RestApi status code 415 on POSTrequestPOST 请求中的 Postman Spring Boot Rest Api 状态代码 415
【发布时间】: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


【解决方案1】:

这个问题是因为你的模型类中的@JsonManagedReference, 尝试交换 @JsonBackReference 和 @JsonManagedReference。它应该工作。 只需探索documentation 了解更多信息。

这是针对同一案例报告的类似issue

【讨论】:

    猜你喜欢
    • 2013-12-08
    • 1970-01-01
    • 1970-01-01
    • 2019-11-06
    • 2020-11-27
    • 2017-03-29
    • 2018-06-10
    • 2020-05-23
    • 1970-01-01
    相关资源
    最近更新 更多