@RequestBody не отображает JSON в объект Java - Spring Boot - PullRequest
1 голос
/ 28 июня 2019

Я не могу преобразовать мой JSON из тела метода post в мой POJO, с @RequestBody внутри моего класса контроллера.

Я отладил ошибку и увидел, что некоторые поля были сопоставлены, а другие нет. Как это (POJO) :

name: null, typeOfPlan: null, Email: example@gmail.com, PhoneNum: 123456789, Website: test.org, Username: null, password: 1234, что странно.

JSON:

{
    "confirmPassword": "1234",
    "email": "example@gmail.com",
    "password": "1234",
    "phoneNum": "123456789",
    "name": "Hello world",
    "typeOfPlan": "Test",
    "userName": "user",
    "website": "test.org"
}

Контроллер

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class SomeController {

    @Autowired
    private Service foo;

    @CrossOrigin
    @PostMapping(value = "/create")
    private void createAccount(@RequestBody BigFoo bigFoo) {
        foo.createAccount(bigFoo);
    }
}

Отсюда я звоню в мою службу, затем в классы DAO.

POJO

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@Getter
@Setter
@NoArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class BigFoo {

    private String name;
    private String typeOfPlan;
    private String email;
    private String website;
    private String phoneNum;
    private String username;
    private String password;
}

Я также пытался разрешить JSON с consumes media type в @PostMapping, но это не помогло решить эту проблему.

Использование Jackson ObjectMapper также не работало.

Ответы [ 3 ]

1 голос
/ 29 июня 2019

Моя проблема была проста: мои переменные в моем Angular-проекте, отправка данных в мое приложение Spring Boot были написаны с ошибками и, следовательно, не были распознаны моим бэкэнд-приложением и, следовательно, не были сопоставлены с моим POJOправильно.


После того, как я изменил свои переменные формы веб-интерфейса в соответствии с переменными моего POJO, я получил это:

POJO data

name: It's good now, typeOfPlan: 2 Year, Email: example@gmail.com, PhoneNum: 123456789, Website: test.org, Username: Master, password: 1234

Spring Boot не удалось отобразить name, typeOfPlan & Username из JSON, потому что они просто не совпадали с теми, что были в моем бэкэнде.


До

Name, typeOfPlan, userName

После

name, type, username

Спасибо всем!

0 голосов
/ 28 июня 2019

Я считаю, что проблема с типом контента! установите его на application/json. Укажите это в почтальоне или локоне.

если вы отправите его с помощью js, попробуйте этот пример

axios.post(
                "/rest/yoururl",
                jsObject
            ).then(
                function (response) {
                    console.log(response.data);
                }.bind(this)
            );

по умолчанию тип контента json

по curl:

curl --header "Content-Type: application/json" \
  --request POST \
  --data '{"username":"xyz","password":"xyz"}' \
  http://url

В postMan:

Заголовки-> поставить ключ Content-Type -> значение application / json. Если ты в почтальоне

0 голосов
/ 28 июня 2019

Во-первых, если вы используете Postman, curl etc.., попробуйте отправить json следующим образом:

{
    "confirmPassword": "1234",
    "email": "example@gmail.com",
    "password": "1234",
    "phoneNum": "123456789",
    "name": "Hello world",
    "typeOfPlan": "Test",
    "userName": "user",
    "website": "test.org"
}

Во-вторых, единственное нулевое значение, которое я получаю, это username, потому что вы отправляете его в свой json следующим образом: userName, вам следует убедиться, что ваш json совместим с вашим POJO

...