Как отправлять объекты JavaScript с клиентской стороны и как получать и анализировать их в Spring Boot Back-end?

Я приходил и оставлял эту проблему много раз, пытаясь создать свои веб-приложения, и мне надоело безрезультатно, до такой степени, что я должен спросить здесь, поэтому, пожалуйста, извините меня, если я откажусь от этого ... Я довольно обострился.

Я пытаюсь отправить данные в виде пар "ключ-значение" с моего клиента (vanilla js) на сервер (java с весенней загрузкой). Я пробовал множество способов сделать это, но не могу найти правильный способ / комбинацию для достижения того, что я хочу сделать. Мой текущий нерабочий код выглядит следующим образом.

Клиентский JS

var object = {
        'id' : 1,
        'username' : 'jumpthruhoops',
        'password' : 'melodysteez'
    };

    Axios
        .post('http://localhost:8080/gameSchedule', JSON.stringify(object))
        .then((response) => {
            console.info(response.data);
        });

Back-End Spring Boot / Java

@CrossOrigin
@RequestMapping(value = "/gameSchedule", headers = "Accept=application/json", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
public String getSchedule(@RequestBody String user) {
    System.out.println(user);
    return "test";
}

Следующий код - это то, что у меня есть в настоящее время, и он дал мне результаты любого типа, близкие к тому, что я ищу. Это дает мне следующую напечатанную строку ...

%7B%22id%22%3A1%2C%22username%22%3A%22tdellard1%22%2C%22password%22%3A%22sisters3%22%7D=

... который я считаю шестнадцатеричным кодом для строкового объекта, который я передал в параметр. Я не уверен, что это из Spring Boot, или это то, что делает JSON.stringify. Поскольку пользовательский объект - это тестовый объект, а фактический объект, который я планирую передать, намного сложнее, я не хочу выяснять, как декодировать шестнадцатеричный код, если только я не могу получить что-либо еще, и я полностью придется.

Поскольку это более сложно, я не хочу использовать много @RequestParams ("name") String VaribleName, например, 40 раз в параметре метода. Это также был единственный способ получить результаты, но передача этих переменных в URL-адрес сводит с ума.

Некоторые другие вещи, которые я пробовал, - это @ModelAttribute и (@RequestBody User user), оба возвращают ошибки, одна из которых, кажется, повторяется, это

018-10-30 23:38:29.346 WARN 12688 --- [io-8080-exec-10] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported]

Поэтому я в значительной степени прошу совета о том, как лучше всего отправлять мои данные из Axios (form.serialize, JSON.stringify, JavaScript Object и т. д.) И какой соответствующий метод мне нужно использовать для получения этих данных на мой Spring Boot Back-End и сделать его манипулятивным, чтобы я мог превратить его в POJO.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
190
2

Ответы 2

Просто удалите JSON.stringify (объект) и поместите объект.

Axios
    .post('http://localhost:8080/gameSchedule', object)
    .then((response) => {
        console.info(response.data);
    });

Вы можете увидеть пример запроса POST здесь документация axios

При загрузке Spring вам нужно создать такой объект:

@Entity
public class UserAccount implements Serializable {

@Id
private Long id;

@Column(unique = true, nullable = false)
@Size(max = 255)
private String userName;

@Column(nullable = false)
@NotNull
private String password;

public Long getId() {
    return id;
}

public void setId(Long id) {
    this.id = id;
}

public String getUserName() {
    return userName;
}

public void setUserName(String userName) {
    this.userName = userName;
}

public String getPassword() {
    return password;
}

public void setPassword(String password) {
    this.password = password;
}

}

и измените свой код здесь

@CrossOrigin
@RequestMapping(value = "/gameSchedule", headers = "Accept=application/json", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
public UserAccount getSchedule(@RequestBody UserAccount user) {
    System.out.println(user.getUserName());
    return user;
}

Но как получить объект и управлять им из Spring Boot?

Tdellard1 31.10.2018 15:54

Просто создайте класс UserAcount, например, этот объект github.com/svlada/springboot-security-jwt/blob/master/src/ma‌ в /…, вы можете видеть в этом ответе, что я его обновил :)

Jonathan JOhx 31.10.2018 16:07

Если вы отправляете объект, вы должны использовать объект при получении на серверной стороне и убедитесь, что имя поля в объекте запроса и имя поля класса на внутренней стороне должны совпадать, так должно быть так:

Я просто вношу некоторые изменения в ваш код для доступа к полю:

var data = {  
        'id' : 1,
        'username' : 'jumpthruhoops',
        'password' : 'melodysteez'
    };
// name of variable(data variable) doesn't matter but inside everything consider as a body

axios.post('http://localhost:8080/gameSchedule', JSON.stringify(object), {
        headers: {
            'Content-Type': 'application/json',
        }
    }
    );

внутренние поля для извлечения

//create one Student class to map fields with body 

@CrossOrigin
@RequestMapping(value = "/gameSchedule", headers = "Accept=application/json", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
public String getSchedule(@RequestBody Student student) {
    System.out.println(student.id);
    System.out.println(student.username);
    System.out.println(student.password);
    return "test"
}

Я все еще получаю эту ошибку Устранено [org.springframework.web.HttpMediaTypeNotSupportedException: тип контента 'application / x-www-form-urlencoded; charset = UTF-8' не поддерживается]

Tdellard1 31.10.2018 15:59

Вы должны указать тип содержимого как «application / json» в части заголовка при отправке запроса, так как у меня есть обновление в ответе

Navin Gelot 01.11.2018 05:35

Другие вопросы по теме