#java #spring #spring-boot
#java #spring #spring-загрузка
Вопрос:
В настоящее время у меня есть ресурс следующим образом
@PostMapping("/color")
public String addColorData(@RequestBody Object obj){
System.out.println(obj.toString());
return "200";
}
и когда я публикую JSON ниже
{ «color»: «Green», «mixutres»: { «Yellow»: 0.5, «random2»: 0.5 } }
печать, как и ожидалось — {color = Green, mixutres = {Yellow = 0.5, random2 = 0.5}}
Однако,
Когда я создаю класс Color
public class Color {
private String color;
private Object mixtures;
public Object getMixtures() {
return mixtures;
}
public void setMixtures(Object mixtures) {
this.mixtures = mixtures;
}
и измените мой ресурс, как показано ниже
@PostMapping("/color")
public String addColorData(@RequestBody Color colorObj){
System.out.println(colorObj.toString());
return "200";
}
смеси заканчиваются как ‘null’
{color=Green, mixtures=’null’}
- Почему смеси заканчиваются как «null»?
- Предполагая, что я не знаю точной структуры смесей, является ли установка типа смесей как объекта правильным подходом? Если нет, не могли бы вы, ребята, дать мне несколько советов по лучшим практикам?
Спасибо
— Последующие действия —
Благодаря Gulliva обнаружена опечатка в моем JSON, когда я тестировал после редактирования
Spring вернул следующее
трассировка»: «org.springframework.http.converter.HttpMessageNotReadableException: ошибка синтаксического анализа JSON: не удается десериализовать экземпляр
java.lang.String
из токена START_OBJECT; вложенным исключением является com.fasterxml.jackson.databind.exc.MismatchedInputException: не удается десериализовать экземплярjava.lang.String
из токена START_OBJECT n в [Источник: (PushbackInputStream); строка: 5, столбец: 18] (через цепочку ссылок:…. «сообщение»: «Ошибка синтаксического анализа JSON: не удается десериализовать экземпляр
java.lang.String
из токена START_OBJECT; вложенным исключением является com.fasterxml.jackson.databind.exc.MismatchedInputException: не удается десериализовать экземплярjava.lang.String
из токена START_OBJECT n в [Источник: (PushbackInputStream); строка: 5, столбец: 18](через цепочку ссылок:
Комментарии:
1. можете ли вы показать геттеры и сеттеры
2. Не могли бы вы добавить класс mixtures?
Ответ №1:
Если ваш пример вверху верен, значит, у вас опечатка в ключе «смеси».
Одно из предложений здесь. Рассмотрите возможность использования ResponseBody в качестве вашего ResponseEntity. Поскольку ResponseBody является универсальным классом, вы можете использовать его с типом, который вам нравится, и задать HTTP StatusCode, например
ResponseEntity.ok("hello world);
Комментарии:
1. Спасибо, что указали на опечатку! после изменения возникла другая проблема: (
Ответ №2:
Если ваша структура представляет собой просто значение пары ключей, вы можете использовать смеси Map<String, String>, которые я предпочитаю ds, и ваш класс будет выглядеть следующим образом :
public class Color {
private String color;
private Map<String, String> mixtures;
public Map<String,String> getMixtures() {
return mixtures;
}
public void setMixtures(Map<String,String> mixtures) {
this.mixtures = mixtures;
}
Поскольку использование структуры типа collection также будет полезно в будущем для доступа / изменения данных.