2016-09-19 45 views
0

我试图从另一个应用程序(reactjs)调用一个应用程序(spring-boot)上的REST终结点。这些应用程序在以下主机和端口上运行。无法将react.js登录连接到SpringBoot应用程序

我试图从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个月。

回答

1

我知道这看起来很熟悉。抱歉,我最后的回答没有解决你所有的问题。

你目前的问题在这里;

public Boolean testLogin(@RequestParam String login) { 

应该

public Boolean testLogin(@RequestBody String login) { 

编辑::第二个问题。你的handleChange功能没有任何值!它应该看起来更像这样;

handleChange(value) { 
    this.setState({login: value}); 
} 

当你输入字段调用这个函数,它需要从输入值传递到状态。你目前的代码基本上与此相同;

this.state.login = this.state.login; 

这显然不会让你到任何地方。

尝试更改。如果仍然无效,请确保在浏览器中打开开发工具,逐行执行代码以确保它正在执行并存储所需的值。

+0

hehe,我刚刚评论过最后一个:) –

+0

我发布了这个新问题,因为我觉得它没有很好的公式化。认为它可能会吸引更多的兴趣。我已经测试了这个方法,并得到以下错误: '缺少必需的请求正文:public java.lang.Boolean com.common.web.TestController.testLogin(java.lang.String)' –

+0

啊,我看到了问题。你的'setState'工作不正常,所以你的状态永远不会得到登录数据。作为一般规则,您可以在控制台中进行适当的调试,并验证变量的值是否符合您的期望。如果你在'login'函数中暂停代码并测试'this.state.login'的值,你会发现它没有定义。我会更新我的答案,以提供更多的细节,但... – gravityplanx

相关问题