Почтальон SpringBoot код состояния RestApi 415 по запросу POST - PullRequest
0 голосов
/ 06 мая 2020

Я только начал изучать Springboot. Все работало нормально, пока я не столкнулся с этой проблемой. Я обыскал все StackOverFlow topi c и inte rnet в целом, и ни один из них не помог мне решить мои проблемы. Я попытался установить Content-Type и Accepts правильно, но это все равно не сработало.

UserController:

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;
}
    }

Ошибка после выполнения запроса POST с помощью Postman:

{
        "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 из модели пользователя решило проблему!

1 Ответ

0 голосов
/ 07 мая 2020

Эта проблема связана с @JsonManagedReference в вашем классе модели. Попробуйте поменять местами @JsonBackReference и @JsonManagedReference. Он должен работать. Просто изучите документацию для получения дополнительной информации.

Это одна похожая проблема , о которой сообщалось для того же случая.

...