0
我试图从另一个应用程序(reactjs)调用一个应用程序(spring-boot)上的REST终结点。这些应用程序在以下主机和端口上运行。无法将react.js登录连接到SpringBoot应用程序
- REST应用程序,使用弹簧启动,http://localhost:8080
- HTML应用程序,使用reactjs,http://localhost:9000
我试图从reactjs发送的登录信息到春季启动,但没有成功。
Reactjs:
import React from 'react';
export default class Login extends React.Component {
constructor() {
super();
this.state = {
login:"",
password:""
};
this.handleChange = this.handleChange.bind(this);
}
handleChange() {
this.setState({login: this.state.login});
}
render() {
return (
<form role="form">
<div>
<input type="text" name="login" onChange={this.handleChange} />
<input type="password" name="password"/>
</div>
<button onClick={this.login.bind(this)}>Login</button>
</form>
);
}
login() {
var xmlhttp = new XMLHttpRequest(); // new HttpRequest instance
var url = "http://localhost:8080/test/login"
xmlhttp.open("POST", url);
xmlhttp.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
xmlhttp.send(JSON.stringify({login: this.state.login}));
}
}
和Spring启动:
@CrossOrigin(origins = "http://localhost:9000")
@RequestMapping(value = "/test/login")
public Boolean testLogin(@RequestParam String login) {
if (login.equals ("ajt"))
return true;
else {
return false;
}
}
我可以看到,这两个应用程序是连接的,即使reactjs给我错误400,当我提交的控制台春季启动应用程序告诉我:
Resolved exception caused by Handler execution: org.springframework.web.bind.MissingServletRequestParameterException: Required String parameter 'login' is not present
我只能假设从Spring引导端,它不能tra nslate通过react.js发送的信息。
ps:忍着我,我一直在编码大约6个月。
hehe,我刚刚评论过最后一个:) –
我发布了这个新问题,因为我觉得它没有很好的公式化。认为它可能会吸引更多的兴趣。我已经测试了这个方法,并得到以下错误: '缺少必需的请求正文:public java.lang.Boolean com.common.web.TestController.testLogin(java.lang.String)' –
啊,我看到了问题。你的'setState'工作不正常,所以你的状态永远不会得到登录数据。作为一般规则,您可以在控制台中进行适当的调试,并验证变量的值是否符合您的期望。如果你在'login'函数中暂停代码并测试'this.state.login'的值,你会发现它没有定义。我会更新我的答案,以提供更多的细节,但... – gravityplanx