Тело запроса недоступно

#spring-boot #jhipster #spring-restcontroller

#весенняя загрузка #jhipster #spring-restcontroller

Вопрос:

RestController:

 @ResponseBody
@RequestMapping(method = POST, value = "/path", consumes = APPLICATION_JSON_VALUE)
public TestModel post(@RequestBody TestModel model) {
    return model;
}
  

Модель выглядит так:

 public class TestModel implements Serializable {


    public String getId() {
        return id;
    }

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

    private String id;

}
  

Опубликуйте этот JSon

 {
  "id" : 4711
}
  

postman выглядит так

1

получить ответ:

 {
    "type": "https://www.jhipster.tech/problem/problem-with-message",
    "title": "Bad Request",
    "status": 400,
    "detail": "Required request body is missing: public ....,
    "path": "/path",
    "message": "error.http.400"
}
  

Похоже, что что-то блокирует @RequestBody , потому @RequestParam что и @PathParam работает хорошо… Кто-нибудь знает, в чем причина этой проблемы?

Комментарии:

1. Вы пытались заключить 4711 в кавычки, поскольку это строка в вашей модели Java, а не целое число / число. Нравится {"id":"4711"}

2. да, я попробовал, это не приводит к изменению результата (Ichange после моего тестирования типа с int на String)..

3. для меня похоже, что что-то блокирует данные RequestBody … есть ли где-нибудь встроенная опция безопасности для блокировки @RequestBody?

4. он также не работает при попытке получить String вместо TestModel следующим образом: post(строковая модель @RequestBody)

5. Вы повысили уровень журнала на сервере для регистратора «org.springframework.web. *»? Вы пробовали тот же запрос, используя более простой клиент REST, такой как JHipster swagger-ui или curl?

Ответ №1:

Возможно, это проблема типа. В вашем postman вы устанавливаете числовое значение, тогда как в коде вы ожидаете строку. Попробуйте, например, ввести строковое значение в postman или изменить тип идентификатора на «int» в вашем коде.