Извините, я совсем новичок в загрузке Spring, но пытаюсь добавить новые API на сервер, который кто-то еще написал:
@RequestMapping(value = RequestMappingConstants.CREATE_POST, method = RequestMethod.POST)
public @ResponseBody Map<String, Object> createPost(@RequestBody Map<String, String> inputMap, HttpServletRequest request) {
LOG.info("Inside createPost");
return DataUtil.ConvertToResponseMap(socialService.createPost(CreatePostRequest.fromMap(inputMap)));
}
В этом методе Controller я принимаю карту, но она дает мне следующая ошибка:
org.springframework.http.converter.HttpMessageNotReadableException: JSON ошибка анализа: невозможно десериализовать экземпляр java.lang.String
из маркера START_OBJECT; вложенное исключение: com.faster xml .jackson.databind.ex c .MismatchedInputException: невозможно десериализовать экземпляр java.lang.String
из маркера START_OBJECT
Это связано с тем, что в запросе есть вложенный объект BaseUser object.
В идеале мне бы хотелось, чтобы метод выглядел следующим образом: вместо карты использовался бы объект запроса:
@RequestMapping(value = RequestMappingConstants.CREATE_POST, method = RequestMethod.POST)
public @ResponseBody Map<String, Object> createPost(@RequestBody CreatePostRequest request) {
LOG.info("Inside createPost");
return DataUtil.ConvertToResponseMap(socialService.createPost(request));
}
Но при этом также возникали проблемы с заполнением вложенного объекта. BaseUser. Поэтому мне было интересно, какая часть сервера преобразует необработанный json в карту или необработанный json в объект запроса? Я не нашел ни одного кода, который делает это. Или это в аннотациях? Нужно ли мне что-то написать для анализа вложенных объектов из json?
Это мой объект запроса:
public class CreatePostRequest extends BaseRequest
{
public BaseUser user;
public String imageUrl;
public String text;
}
И объект BaseUser:
public class BaseUser {
public int userId;
public String firstName;
public String lastName;
public int hairType;
public String location;
public String profileImageUrl;
public BaseUser(){}
public BaseUser(int userId, String firstName, String lastName, int hairType, String location, String profileImageUrl)
{
this.userId = userId;
this.firstName = firstName;
this.lastName = lastName;
this.hairType = hairType;
this.location = location;
this.profileImageUrl = profileImageUrl;
}
}