Я приходил и оставлял эту проблему много раз, пытаясь создать свои веб-приложения, и мне надоело безрезультатно, до такой степени, что я должен спросить здесь, поэтому, пожалуйста, извините меня, если я откажусь от этого ... Я довольно обострился.
Я пытаюсь отправить данные в виде пар "ключ-значение" с моего клиента (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.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Просто удалите 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;
}
Просто создайте класс UserAcount, например, этот объект github.com/svlada/springboot-security-jwt/blob/master/src/ma в /…, вы можете видеть в этом ответе, что я его обновил :)
Если вы отправляете объект, вы должны использовать объект при получении на серверной стороне и убедитесь, что имя поля в объекте запроса и имя поля класса на внутренней стороне должны совпадать, так должно быть так:
Я просто вношу некоторые изменения в ваш код для доступа к полю:
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' не поддерживается]
Вы должны указать тип содержимого как «application / json» в части заголовка при отправке запроса, так как у меня есть обновление в ответе
Но как получить объект и управлять им из Spring Boot?