Spring mvc: привязка вложенных параметров запроса, когда тип содержимого запроса x-www-form-urlencoded - PullRequest
0 голосов
/ 07 мая 2018

параметр запроса:

{
    "username": "aaa",
    "password": "bbb",
    "detail": {
        "gender": "ccc",
        "location": "ddd"
    }
}

и я хочу получить параметр запроса в Spring MVC, используя:

@RequestMapping(value = "/test")
public String test(User user) {
    return user.toString();
}

класс User определяется следующим образом:

@ToString
@NoArgsConstructor
@Data
public class User {
    private String username;
    private String password;
    private Detail detail;

    @Data
    @NoArgsConstructor
    public class Detail {
        private String gender;
        private String location;
    }
}

при отправке запроса я получил ошибку:

Недопустимое свойство 'detail [пол]' класса бина [com.example.demo.param.User]: недопустимая попыткачтобы получить свойство «деталь» выкинуло исключение;вложенным исключением является org.springframework.beans.NullValueInNestedPathException: недопустимое свойство 'detail' класса бина [com.example.demo.param.User]: не удалось создать экземпляр типа свойства [com.example.demo.param.User $ Detail] дляавтоматически расти путь вложенного свойства;Вложенным исключением является java.lang.NoSuchMethodException: com.example.demo.param.User $ Detail. ()

Данные запроса можно увидеть в инструментах разработчика Chrome:

username: aaa
password: bbb
detail[gender]: ccc
detail[location]: ddd

кажется, что деталь [пол] и деталь [местоположение] не могут быть распознаны как подчиненные атрибуты детали

, это хорошо работает, когда я использую аннотацию @RequestBody для получения запроса типа контента: приложение/json.

но как я могу получить параметр запроса в качестве объекта User в этом случае выше?

1 Ответ

0 голосов
/ 07 мая 2018

С вашей структурой объекта запрос будет работать в этих 2 случаях (лучше вариант 1):

Вариант 1:

username: aaa
password: bbb
detail.gender: ccc
detail.location: ddd
  • Вложенные данные формы должны быть доступны через 'точку'

  • Запрос должен быть передан следующим образом для работы с объектом Detail: (Обратите внимание, что переменная объекта доступна как detail.gender вместо detail[gender])

Вариант 2:

  • Создайте свою деталь как карту вместо сложного объекта, чтобы деталь [пол] соответствовала ключевому значению «пол»
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...