Почему сервер ответил со статусом 415 - API Post Method - PullRequest
2 голосов
/ 14 апреля 2020

Я пытаюсь создать свой собственный API с помощью Spring Boot, который на данный момент использует доступ к внешним данным из API качества воздуха.

У меня есть объект CityInfo:

@Entity
public class CityInfo{
    @Id
    private String id;
    private String name;


    public CityInfo(){

    }

    public CityInfo(String id, String name) {
        super();
        this.id = id;
        this.name = name;
    }
.
.
.
}

Rest Controller:

    @Autowired
    private CityInfoService cityInfoService;
    @Autowired
    private CityInfoRepository cityInfoRepository;

    @GetMapping("/CityInfo")
    public List<CityInfo> getAllCityInfo() {
        return cityInfoRepository.findAll();
    }

    @PostMapping ("/CityInfo")
    public void addCityInfo(@RequestBody CityInfo cityInfo) {
        cityInfoService.add(cityInfo);
    }

Когда дело доходит до публикации в "localhost: port / CityInfo", почтальон отлично работает с {"id": "1", "name": "London"} и это читается в "/CityInfo".

Когда я пытаюсь опубликовать с использованием JS, он возвращает ошибку 415, которая предположительно" 415 Unsupported Media Type ".

function postData(){
    let id = "31";
    let name = "CITYCITY"
    fetch('http://localhost:8084/CityInfo', {
        method: 'POST',
        body:JSON.stringify({"id":id,
                            "name":name})
    }).then((res) => res.text())
        .then((text)=>console.log("text:"+ text))
        .catch((err)=>console.log("err:" + err))
}
postData();

Вкл. консоль возвращается: «Не удалось загрузить ресурс: сервер ответил с состоянием 415 ()» *

Я полагаю, я отправляю JSON с неправильным форматом, но это не похоже на мне по крайней мере.

Любая помощь будет отличной. Ты

Редактировать: Фото почтальона enter image description here

function postData(){
    let id = "31";
    let name = "CITYCITY"
    fetch('http://localhost:8084/CityInfo', {
        method: 'POST',
        body:JSON.stringify({"id":id,
                            "name":name}),
        contentType: 'application/json',
        contentEncoding: 'gzip',
        contentEncoding: 'deflate',
        contentEncoding: 'br',
    }).then((res) => res.text())
        .then((text)=>console.log("text:"+ text))
        .catch((err)=>console.log("err:" + err))
}
postData()

Возвращает: POST http://localhost: 8084 / CityInfo 415

Ответы [ 2 ]

1 голос
/ 14 апреля 2020

Документация здесь объясняет, что означает ответ 415.

Возможно, ваш Content-Type или Content-Encoding неверен в вашей функции postData.

В любом Оцените, нужно проверить, что ожидает конечная точка, и убедиться, что ваш запрос соответствует этим ожиданиям.

0 голосов
/ 15 апреля 2020

Итак, в основном я отправлял документ JSON с неверным форматом. При использовании Почтальона он имеет «Content-Type»: «application / json»

Вот отредактированный JS:

function postData(){
    let id = "31";
    let name = "CITYCITY"
    fetch('http://localhost:8084/CityInfo', {
        method: 'POST',
        body:JSON.stringify({"id":id,
                            "name":name}),
        headers: {
            'Content-Type': 'application/json'
        }
    }).then((res) => res.text())
        .then((text)=>console.log("text:"+ text))
        .catch((err)=>console.log("err:" + err))
}
postData()
...