2017-03-06 1 views
0

私はローカルelasticsearchエンジンでインデックスを作成するための小さなアプリケーションを開発しようとしています。フロントエンドではanglejsを使用し、バックエンドではspring-bootを使用します。ただし、インデックスを正常に作成することはできますが、フロントエンドでレスポンスを取得したい場合は、エラーが表示され続けます。Angularjs http春のブートからの応答なし

app.service('ESIndexService', function($http) { 

    this.createESIndex = function(esindexObj) { 
     var settings = { 
       method: 'POST', 
       url: BASE_URL + "/ESIndex/createESIndex", 
       data: esindexObj 
      }; 
     return $http(settings).then(function(response) { 
      console.log("response:"+response); 
      return response; 
     }, function(error) { 
      console.log("error:"+error); 
      return error; 
     }); 
    }; 


}); 

その後、これは私のコントローラである:

@CrossOrigin 
@RestController 
@RequestMapping(value = "ESIndex") 
public class ESIndexController { 

    @RequestMapping(value = "createESIndex", method = RequestMethod.POST) 
    public @ResponseBody String createIndex(@RequestBody ESIndex esIndex) { 
     try { 
      Settings settings = Settings.builder() 
        .put("xpack.security.user", String.format("%s:%s", Constants.ES_UNAME, Constants.ES_PWD)).build(); 
      TransportClient client = new PreBuiltXPackTransportClient(settings) 
        .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(Constants.ES_HOST), Constants.ES_PORT)); 
      CreateIndexResponse response = client.admin().indices().prepareCreate(esIndex.getName()).setSettings(Settings.builder() 
        .put("index.number_of_shards", esIndex.getNumberOfShards()) 
        .put("index.number_of_replicas", esIndex.getNumberOfReplicas())).get(); 
      client.close(); 
      if(response.isAcknowledged() && response.isShardsAcked()) 
       return Constants.SUCCESS; 
      else 
       return "Fail to create index!"; 
     } catch (Exception e) { 
      e.printStackTrace(); 
      return e.getMessage(); 
     } 
    } 
} 

私はAngularJS応答で応答ステータスとデータを取得したい

以下は私のAngularJS APIコールです。しかし、それは私にエラーを投げつけ続けます:

error:SyntaxError: Unexpected token i in JSON at position 0 

私はJSON.parse関数を使用していません、なぜこのようなエラーが出ますか? responseType追加した後


:まだ同じエラーを投げて、 'テキスト' を、私は "transformResponse:未定義" を追加する必要がありますnextwork enter image description here

それは結局のところ、クロムの他に、しかし、私のプロジェクト、私はこれをしたことはありません。違いは何ですか?

AngularJS:

this.newBlog = function(blogObj) { 
    var settings = { 
     method: 'POST', 
     url: baseUrl + "/blog/newBlog.do", 
     data: blogObj 
    } 
    return $http(settings).then(function(response) { 
     return response; 
    }, function(error) { 
     return error; 
    }); 
}; 

Javaのコントローラー:

@RequestMapping(value="newBlog.do", method=RequestMethod.POST) 
public @ResponseBody String newBlog(@RequestBody Blog blog, HttpServletRequest request) { 

    User createdBy = (User) request.getSession().getAttribute("user"); 
    if(createdBy == null) 
     return NO_SESSION_MSG; 
    else { 
     createdBy.setPwd(null); 
     blog.setCreatedAt(TQBUtilities.getCurrentTime()); 
     blog.setLastUpdatedAt(TQBUtilities.getCurrentTime()); 
     blog.setCreatedBy(createdBy); 
     return blogService.newBlog(blog); 
    } 

} 
+0

サービスは有効なJSONを返しません。ブラウザの開発ツール(F12/Cmd-Alt-I)を開いて、ネットワークパネルにアクセスして、あなたが何を応答として得るかを見てください。 'function(error)'コールバックを削除する必要があります。なぜなら、エラーを成功に変換するためです。 –

+0

もっと見ると、この解決策を試すことができます:http://stackoverflow.com/a/27765419/2002257 – jheimbouch

+0

@jheimbouch transformResponse:undefined works! – TommyQu

答えて

0

角度を自動的にJSONとしてサーバーの応答を解析しようとしています。あなたの設定にこれを追加してみてくださいので

var settings = { 
    method: 'POST', 
    url: BASE_URL + "/ESIndex/createESIndex", 
    data: esindexObj, 
    responseType: 'text' 
}; 
+0

同じエラーが表示される場合は、最新の質問をご覧ください。 – TommyQu

0

@jheimbouch "transformResponse:未定義" を追加

responseType: 'text' 

オブジェクト以下のように、HTTP呼び出しに、正常に動作します:

var settings = { 
     method: 'POST', 
     url: BASE_URL + "/ESIndex/createESIndex", 
     data: esindexObj, 
     transformResponse: undefined 
}; 

しかし、なぜangularjs 1.6.2で必要ですか? AngularJS 1.4.8を使用していたときに、transformResponse属性を追加する必要はありません。

関連する問題