Когда кто-то нажимает на Signup
, логика, которую я использую для создания учетной записи, такова:
Сначала создайте User
в моей базе данных.
createUser = () =>{
var xhr = new XMLHttpRequest();
xhr.open('POST', 'http://localhost:8080/user/');
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send(JSON.stringify({ }));
let that=this;
xhr.onreadystatechange= function() {
if (this.readyState === 4 && this.status === 200) {
that.state.newUser= this.responseText.toString();
}
};
};
Затем создайте LoginCredential
в моей базе данных:
onButtonClick = () =>{
var xhr = new XMLHttpRequest();
xhr.open('POST', 'http://localhost:8080/login/');
xhr.setRequestHeader("Content-Type", "application/json");
this.createUser();
xhr.send(JSON.stringify({ email: this.state.email,passwordHash:this.state.passwordHash,user:JSON.parse(this.state.newUser) }));
};
Но это дает мне ошибку, говоря: POST http://localhost:8080/login/
400
Если я изменю последнюю строку второго шага на: xhr.send(JSON.stringify({ email: this.state.email,passwordHash:this.state.passwordHash,user:JSON.parse(this.state.newUser) }));
В основном это изменение между user:JSON.parse(this.state.newUser)
и user:this.state.newUser
Во второмПодход Я получаю два исключения:
Uncaught SyntaxError: Unexpected end of JSON input
Uncaught Error: A cross-origin error was thrown. React doesn't have access to the actual error object in development.
Исключение Spring Boot
предоставление:
Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot construct instance of 'com.mua.cse616.Model.User' (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value (''); nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of 'com.mua.cse616.Model.User' (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('')
Что здесь не так?Как это исправить?
this.state.newUser
содержит значение примерно так {"userID":577}
Я использую Spring Boot на моей стороне сервера.Все Controller
классы помечены @CrossOrigin(origins = "http://localhost:3000")
При необходимости по какой-то причине мой User
класс:
public class User {
@Id @GeneratedValue Long userID;
@OneToOne(fetch = FetchType.LAZY,targetEntity = LoginCredential.class)
@JoinColumn(name = "userID",referencedColumnName = "userID")
@JsonIgnore
private LoginCredential loginCredential;
}
И LoginCredential
класс:
public class LoginCredential {
@Id @GeneratedValue Long userID;
String eMail;
String passwordHash;
@OneToOne(mappedBy = "loginCredential", fetch = FetchType.LAZY)
User user;
}