Я не могу преобразовать свой JSON из тела метода сообщения в свой POJO с @RequestBody внутри моего класса контроллера.
Я отладил ошибку и увидел, что одни поля отображаются, а другие нет. Вот так (ПОЖО):
name: null, typeOfPlan: null, Email: [email protected], PhoneNum: 123456789, Website: test.org, Username: null, password: 1234, что странно.
JSON:
{
"confirmPassword": "1234",
"email": "[email protected]",
"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.
ПОЖО
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 также не сработало.
Дай мне одну секунду. Обновлено: я добавил точный формат, в котором они отображаются в моем объекте в режиме отладки. Извините, это мой POJO, а не JSON.
поделитесь JSON, чтобы лучше понять
Я добавил JSON
Попробуйте добавить метод gettter и setter или используйте ломбок.
Я попробую ломбок, так как я никогда не использовал его раньше.
У него тот же результат, но я добавлю ломбок к своему вопросу.
В вашем Json, который вы разместили, строки должны быть заключены в двойные кавычки. например "подтвердить пароль": "1234". подтвердите свой Json jsonformatter.curiousconcept.com
@user1697575 Действительно JSON, я бы приложил сюда скриншот, но не могу.
У меня та же проблема, что и у вас @Compilerv2, но на этот раз странно то, что мои переменные POJO и мой интерфейс написаны одинаково




Во-первых, если вы используете Postman, curl etc.., попробуйте отправить json таким образом:
{
"confirmPassword": "1234",
"email": "[email protected]",
"password": "1234",
"phoneNum": "123456789",
"name": "Hello world",
"typeOfPlan": "Test",
"userName": "user",
"website": "test.org"
}
Во-вторых, единственное нулевое значение, которое я получаю, это username, потому что вы отправляете его в свой json следующим образом: userName, вы должны проверить, что ваш json совместим с вашим POJO
Нет, я не использую Postman или Curl. Я отправляю его прямо из моего внешнего проекта Angular.
Я не отправлял свой JSON с нулевым значением, я не понимаю, что вы пытаетесь сказать.
Я имел в виду, что имя пользователя имеет заглавную букву N внутри, и из-за этого это не сработало.
Понятно, но я получил JSON от инспектора Chrome, который выводит console.info(). Так что это не должно сильно влиять на мой JSON, потому что это просто представление JSON. Я никогда не прикасался к нему.
Я считаю, что проблема связана с типом контента! установите его на application/json. Укажите его в postman или curl.
если вы отправите его с помощью js, попробуйте этот пример
axios.post(
"/rest/yoururl",
jsObject
).then(
function (response) {
console.info(response.data);
}.bind(this)
);
по умолчанию тип содержимого json
по завитку:
curl --header "Content-Type: application/json" \
--request POST \
--data '{"username":"xyz","password":"xyz"}' \
http://url
В постмане:
Headers-> put key Content-Type -> value application/json. If you are in postman
Где мне найти content-type, чтобы я мог установить его на application/json?
Заголовки-> поставить ключ Content-Type -> значение application/json. Если вы в почтальоне
Я понятия не имею, куда поместить это в свой проект, опять же, у меня нет почтальона, Curl или любого другого приложения, которое имеет дело с тем, что вы говорите. Я отправил JSON вручную, введя форму из моего внешнего проекта и отправив ее.
упс, это проблема. Проверьте, что такое Content-type в браузере, затем
Где это в моем браузере? Я не могу найти его, как сказано здесь: stackoverflow.com/questions/15148497/… Я смотрю на вкладку своей сети в инспекторе.
в хроме: щелкните правой кнопкой мыши -> проверьте элемент -> вкладка сети -> когда вы нажмете кнопку в своей форме, будет отправлен некоторый запрос, который появится в журнале -> щелкните по нему -> посмотрите его заголовки -> готово
Я думаю, вам нужно что-то прочитать о типах контента, чтобы иметь возможность использовать это в своей работе. Это нормально, что вы не являетесь фронтенд-разработчиком, но вы пишете код, который будет использоваться фронтендом, и вам нужно знать, как он может передавать данные на сервер, а на самом деле есть только пара популярных типов контента, вы легко их запомните (некоторые используются по умолчанию в формах, другие используются по умолчанию, когда вы делаете запрос ajax с определенным методом). developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST
Моя проблема была проста: мои переменные в моем проекте Angular, отправляющие данные в мое приложение Spring Boot, были написаны с ошибкой и, следовательно, не были распознаны моим внутренним приложением и, следовательно, не были правильно сопоставлены с моим POJO.
После того, как я изменил переменные формы внешнего интерфейса, чтобы они соответствовали переменным моего POJO, я получил следующее:
данные POJO
name: It's good now, typeOfPlan: 2 Year, Email: [email protected], PhoneNum: 123456789, Website: test.org, Username: Master, password: 1234
Spring Boot не удалось сопоставить name, typeOfPlan и Username из JSON, потому что они просто не совпадали с теми, что есть в моем бэкенде.
До
Name, typeOfPlan, userName
После
name, type, username
Спасибо всем!
У меня действительно была такая же проблема, и я не могу поверить, что не заметил ее. В моем запросе был «пароль» с 3-мя буквами, и мои глаза просто не могли его увидеть: «пароль». Я рад, что вы опубликовали это, потому что это заставило меня вернуться и перепроверить.
В моем случае данные были заключены в такие скобки — {данные}. Хорошо дважды проверить структуру, является ли она массивом или объектом.
Вы не включили фактическое содержимое JSON.