Spring boot PutMapping с Enum как проблема RequestBody

У меня есть конечная точка контроллера загрузки Spring следующим образом.

@PutMapping("/manage/{id}")
public ResponseEntity<Boolean> manage(@PathVariable Long id, @RequestBody Type type) { 
  ...
}

Где Тип - это перечисление, как показано ниже.

public enum Type {
    ONE,
    TWO
}

ВЫПУСК 1: Когда я тестирую этот контроллер, я должен отправить контент как "ONE" вместо ONE для успешного вызова. т.е. работает со следующим кодом.

mvc.perform(put("/api/manage/1")
            .contentType(MediaType.APPLICATION_JSON_VALUE)
            .content("\"" + Type.ONE + '\"'))
            .andExpect(status().isOk());

Не работает с

mvc.perform(put("/api/manage/1")
            .contentType(MediaType.APPLICATION_JSON_VALUE)
            .content(Type.ONE.name()))
            .andExpect(status().isOk());

ВЫПУСК 2: Я не могу вызвать этот метод из службы Angular.

this.http.put<string>('/api/manage/' + id, type)

дает мне

org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'text/plain;charset=UTF-8' not supported

Все работает, когда я добавляю Enum в Dto и отправляю объект от клиента. Но из-за некоторых бизнес-требований я хочу использовать саму текущую структуру. то есть Enum как RequestBody.

ОБНОВИТЬ

Я также попытался изменить структуру метода контроллера на

@PutMapping(value = "/manage/{id}", consumes = MediaType.TEXT_PLAIN_VALUE)

Я получаю следующую ошибку.

Content type 'text/plain' not supported

Вы смогли найти какое-нибудь решение? Я столкнулся с аналогичной проблемой.

neetinnagap 19.11.2020 14:26
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
1
1 111
1

Ответы 1

Обе проблемы связаны с попыткой использовать конечную точку JSON в качестве конечной точки с простым текстом.

Объявление 1, ONE недействителен JSON (действителен "ONE")

Объявление 2: когда вы просто публикуете строку, она отправляется как text/plain, и конечная точка жалуется.

Вероятно, добавление consumes = "text/plain" к вашему @PutMapping решит проблему, но, честно говоря, я не уверен, работают ли сопоставления строк / перечислений из коробки в мешанине, которая является весенней загрузкой.

Вообще-то я это добавил ... Но у меня такая же ошибка, просто отсутствует ;charset=UTF-8. Пожалуйста, проверьте обновленный вопрос

Philip John 26.10.2018 17:09

Другие вопросы по теме