Spring MVC не могу привязать json правильно - PullRequest
0 голосов
/ 26 мая 2020

На сервер отправляется объект json, содержащий поле :

{"sName":"something"}

В моей модели запроса я объявляю переменную с тем же именем:

String sName;

Но я получил ноль, когда получил в Контроллере.

Я меняю имя поля на строчные (sname) или добавляю аннотацию JsonProperty(value="sName"), это работает. Так в чем же проблема?

Контроллер

public ResponseEntity<JSONObject> getComprehensiveInquiryCp(@Validated @RequestBody ComprehensiveInquiryRequestModel body) {
        Map<String, Object> content;
        JSONObject result = new JSONObject();
        String sLicense = body.getSLicense();
...
}

ComprehensiveInquiryRequestModel

@Data
public class ComprehensiveInquiryRequestModel {
...
    //@JsonProperty(value = "sLicense")
    private String sLicense;
...
}

Ответы [ 2 ]

1 голос
/ 26 мая 2020

Из моей головы: если у вас есть аксессоры в этом bean-компоненте, то я думаю, что Джексон предпочитает использовать их, если они существуют. И / или Джексон предпочитает аксессоры для частных полей. Как вы заметили, вы можете изменить это поведение с помощью конфигурации Jakson (например, с помощью аннотаций).

Попробуйте: 1. отладить, удалить методы доступа и сделать поле publi c. Если это сработает, снова измените поле на частное и убедитесь, что методы доступа названы правильно.

Также не рекомендуется использовать префиксы с одним символом. Они могут быть c проблемными и запутанными. Префиксы в целом - это ленивая и неочищенная практика кода (tm).

0 голосов
/ 28 мая 2020

Важно, чтобы ваши сеттеры (и геттеры) присутствовали и действительно соответствовали соглашению об именах Java. Свойство json с именем «myFirstName» обычно требует, например, средства установки publi c «setMyFirstName (...)». Так что "sName" требует "setSName ()", я думаю. Конечно, похоже, что здесь виновата идея именования.

...