Как использовать @PostMapping из браузера? - PullRequest
0 голосов
/ 22 марта 2019

Я разрабатываю простой REST-сервис с использованием Spring.У меня есть сущность и контролер для этого.Моя проблема в том, что я не могу использовать функцию Post из браузера, она работает только из терминала.Функция Get отлично работает из браузера и терминала, но функция Post работает только из терминала, но я должен, чтобы она работала из браузера.

Для приведенного ниже кода, если я перейду к:

http://localhost:8080/cities

результат в порядке, все записи возвращены.

Метод получения:

@RestController
public class CityController {

    ...

    @GetMapping(value = "/cities", produces = "application/json; charset=UTF-8")
    List<City> all() {
        return repository.findAll();
    }
}

Для метода Post, просто работает с терминала, если я напишу что-то вроде:

curl -X POST localhost: 8080 / towns -H 'Тип содержимого: application / json' -d'{"name": "test", "state": "test"}'

Результат в порядке, запись создана.

Но из браузера, если я пытаюсьдобавьте новую запись с:

http://localhost:8080/cities?name=test&state=test

ничего не происходит, и не возникает ошибка.

Метод отправки:

@PostMapping(path = "/cities", consumes = "application/json", produces = "application/json")
City newCity(@RequestBody City city) {
    return repository.save(city);
}

Объект:

@Entity
public class City {

    @Id @GeneratedValue(strategy=GenerationType.AUTO) Long id;
    private String name;
    private String state;

    public City() {
    }

    public City(String name, String state) {
        this.name = name;
        this.state = state;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Long getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }

}

1 Ответ

0 голосов
/ 22 марта 2019

Набрав http://localhost:8080/cities?name=test&state=test в браузере, вы все равно будете отправлять его как GET.

Чтобы отправить как POST, у вас есть несколько вариантов:

  1. Используйте плагин для браузера, как уже упоминали другие.
  2. Создайте HTML-форму.
  3. Используйте JavaScript.

Вариант 1 отлично подходит для отладки и тестирования, ноне подходит для качественного веб-сайта.Вы не можете разумно ожидать, что ваши посетители установят или используют надстройку браузера для взаимодействия с вашим сайтом.

Вариант 2 - наиболее традиционный дизайн.Вам нужно будет предоставить файл HTML из вашего приложения (это может быть статический файл HTML или использовать каркас шаблона, такой как Thmyeleaf или Freemarker).Для HTML потребуется элемент формы , настроенный для использования POST и указания его на конечную точку.Имейте в виду, что ваша конечная точка должна будет принимать закодированные данные формы, а не только JSON.

Вариант 3 может быть реализован несколькими способами.У вас может быть HTML-файл, который использует встроенный JavaScript для вызова вашей конечной точки, или вы можете использовать какую-то инфраструктуру, такую ​​как Angular или React.

Множество опций, и трудно сказать, какая из них лучше, не зная, что именно выПытаешься сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...