Как загрузочный сервер Spring конвертирует json в объект запроса - PullRequest
0 голосов
/ 01 февраля 2020

Извините, я совсем новичок в загрузке 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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...