2016-09-19 14 views
0

あるアプリケーション(スプリングブート)を別のアプリケーション(reactjs)から呼び出しようとしています。アプリケーションは、次のホストとポートで実行されています。私は春ブートに成功せずreactjsからログイン情報を送信しようとしています春ブーツ、http://localhost:8080 react.jsログインをSpringBootアプリケーションに接続できません

  • HTMLアプリケーション、reactjsを使用して、http://localhost:9000
  • を使用して

    • RESTアプリケーション、。

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

      と春ブーツ:

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

      私は2つのアプリがreactjsは私に私が提出するエラー400、、のコンソールを与えるにもかかわらずのために接続されていることがわかります春のブートのアプリは私に教えてくれます:

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

      私は春のブート側からは、 react.js経由で送信されたものは除きます。

      ps:私と一緒にいて、私は約6ヶ月間コーディングしています。

    答えて

    1

    私はこれがよく知られていたことを知っていました。申し訳ありませんが私の最後の答えはすべての問題を修正していません。

    現在の問題はこちらです。

    public Boolean testLogin(@RequestParam String login) { 
    

    public Boolean testLogin(@RequestBody String login) { 
    

    EDIT ::第二の問題であるべき。

    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

    関連する問題