2016-09-19 6 views
0

Ich versuche, REST-Endpunkte auf einer Anwendung (Spring-Boot) von einem anderen (reactjs) aufzurufen. Die Anwendungen werden auf den folgenden Hosts und Ports ausgeführt.Kann nicht verbinden react.js Login SpringBoot App

Ich versuche, die Login-Informationen von reactjs senden to-Boot zu springen, aber ohne Erfolg.

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})); 
} 
} 

und Spring-boot:

@CrossOrigin(origins = "http://localhost:9000") 
@RequestMapping(value = "/test/login") 
public Boolean testLogin(@RequestParam String login) { 
    if (login.equals ("ajt")) 

    return true; 
    else { 
     return false; 
    } 
} 

Ich kann sehen, dass die beiden Apps für obwohl reactjs anschließen gibt mir 400-Fehler, wenn ich vorlegen, die Konsole der Frühlings-Boot-App sagt mir:

Resolved exception caused by Handler execution: org.springframework.web.bind.MissingServletRequestParameterException: Required String parameter 'login' is not present 

ich nur, dass aus der Frühjahr-Boot-Seite übernehmen kann, kann es nicht tra nslate was immer über react.js gesendet wird.

PS: Bär mit mir, ich habe für etwa 6 Monate codiert.

Antwort

1

Ich wusste, dass dies bekannt vorkam. Sorry, meine letzte Antwort hat nicht alle Probleme behoben.

Ihr aktuelles Problem ist hier;

public Boolean testLogin(@RequestParam String login) { 

Sollte

public Boolean testLogin(@RequestBody String login) { 

EDIT :: Zweites Problem sein.

Ihre handleChange Funktion nimmt keine Werte an! Es sollte eher so aussehen;

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

Wenn Ihr Eingabefeld diese Funktion aufruft, muss es einen Wert von dem Eingang passieren in den Staat. Ihr derzeitiger Code ist im Wesentlichen derselbe;

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

Welche offensichtlich wird Sie nirgends bekommen.

Versuchen Sie diese Änderung. Wenn es immer noch nicht funktioniert, stellen Sie sicher, dass Sie Ihre Dev-Tools in Ihrem Browser öffnen und den Code Zeile für Zeile durchgehen, um sicherzustellen, dass er die gewünschten Werte ausführt und speichert.

+0

hehe, ich habe gerade den letzten wieder kommentiert :) –

+0

Ich postete diese neue Frage, da ich fühlte, dass es nicht gut formuliert war. Dargestellt könnte es mehr Interesse wecken. Ich habe diese Methode bereits getestet und den folgenden Fehler erhalten: 'Erforderliche Anforderung Körper fehlt: Öffentliche java.lang.Boolean com.common.web.TestController.testLogin (java.lang.String)' –

+0

Ah, sehe ich das Problem . Ihr 'setState' funktioniert nicht richtig, so dass Ihr Status niemals die Login-Daten erhält. Im Allgemeinen sollten Sie in Ihrer Konsole bequem debuggen und überprüfen, ob der Wert von Variablen Ihren Erwartungen entspricht.Wenn Sie den Code während der 'login'-Funktion pausieren und den Wert von' this.state.login' testen, werden Sie feststellen, dass er nicht definiert ist. Ich werde meine Antwort aktualisieren, um weitere Details zu geben ... – gravityplanx

Verwandte Themen