Как должен выглядеть мой почтовый запрос? (тело почтового запроса) - PullRequest
0 голосов
/ 01 октября 2019
@PostMapping(path="/check/keywords")
    @RequestMapping(value = "/check/keywords", method = RequestMethod.POST)
    public int totalKeywords(@RequestBody String text,@RequestBody String[] keywords) throws Exception{
        System.out.println(text);
        System.out.println(keywords.length);
        return EssayGrader.totalKeywods(text);
    }

Я пробовал разные тела для этого запроса, но, похоже, ничего не работает. Либо это дает ошибку 400 или 500 внутренняя ошибка сервера. Я хочу передать текст типа строки и некоторые ключевые слова в виде списка или массива со страницы HTML в мой код Java, чтобы увидеть, сколько ключевых слов есть в этой текстовой строке. Можете ли вы помочь мне.

1 Ответ

1 голос
/ 01 октября 2019

Я считаю, что на уровне метода может быть только один @RequestBody аннотированный параметр. Я рекомендую отправить ваш текст и ключевые слова в виде документа JSON в теле запроса вашего HTTP-запроса. Например, это может выглядеть так:

{ "text": "a simple text", "keywords": ["simple", "text"] }

Напишите простой Java-класс, который содержит эти два значения, например,

class Data {
   String text;
   String[] keywords;

   //don't forget getter + setter + noargs constructor
}

Измените ваш метод на:

@PostMapping(path="/check/keywords", consumes="application/json", produces="application/json")
public int totalKeywords(@RequestBody Data data) {
    String text = data.getText();
    String[] keywords = data.getKeywords();
    // do whatever...
    return ...
}

Установите Content-Type заголовок на application/json при отправке POST-запроса почтальона! И убедитесь, что у вас есть библиотека Джексона - для "автоматического" сопоставления структур JSON с классами / объектами Java - на вашем пути к классам (если вы используете Spring Boot, это должно быть уже при импорте этой зависимости:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

Надеюсь, это поможет. Удачи!

...