2016-09-17 8 views
1

AngularJSから数日間HTTP POSTを動作させようとしています。私は本当に今すぐ立ち往生しています、そして、私は本当にどんな洞察力にも感謝します!サーバー側ではJAX-RSとJerseyを使用しています。私が渡しているオブジェクトはタイプapplication/jsonで、JavaクラスStudentを作成しました(詳細は以下のコードを参照してください)。私の目標はAngularJSのStudentオブジェクトをサーバーに投稿することです。Java REST HTTP POSTはcurlで動作しますがAngularJSでは動作しません

私のロジックがサーバー側からのものであることを確認するために、Google AppsのREST APIクライアントとUnixコマンドのカールを使用しました。どちらのメソッドもHTTPステータス200を返しました。しかし、AngularJSから同じものを試しても、HTTP POSTにはエラーがあり、Responseオブジェクトにはデータがなく、ステータスが-1です。投稿のリクエストはHTTPステータス204を出力するため、サーバーに到達しているようです。 AngularJSのステータスコードは204ですが、curl/REST APIクライアントではステータスが200になっています正しく。

コントローラの定義およびHTTP POSTコールが含ま機能addAName()

:HTTP POSTコールを受け入れ

app.controller('PostingController', function($scope, $http) { 
$scope.postMessage='This message is a default message and will change after I click the button and addAName() is called.'; 
$scope.name='CODER'; 
$scope.postData = 'Not Available'; 

$scope.addAName = function(){ 
    var data = {"studentId": 2, "firstName": "Jason", "lastName": "Lee", "specialization": "Student"}; 

    $http.post("http:/localhost:8080/MathAssignment/studentservice/users", data).then(function successCallback(response) { 
     $scope.postMessage = "POSTING WORKS!"; 
     $scope.postStatus = response.status; 
     $scope.postData = response.data; 
    }, function errorCallback(response) { 
     $scope.postMessage = "POSTING STILL DOES NOT WORK"; 
     $scope.postStatus = response.status; 
     $scope.postData = response.data; 
    }); 
}; 
}); 

サーバー側のコードを

以下

は、私のコードの関連部分です

@POST 
    @Path("/users") 
    @Produces(MediaType.APPLICATION_JSON) 
    @Consumes(MediaType.APPLICATION_JSON) 
    public Response updateUser(Student inputJsonObj) throws IOException { 
     int id = (int) inputJsonObj.getStudentId(); 
     String name = (String) inputJsonObj.getFirstName() ; 
     String profession = (String) inputJsonObj.getSpecialization(); 
     System.err.println("JSON is" + inputJsonObj.toString()); 
     System.err.println("Name is" + name); 
     return Response.status(200).entity(inputJsonObj).build(); 
    } 

Studentクラス定義:

public class Student { 

    private int studentId; 
    private String firstName; 
    private String lastName; 
    private String specialization; 

    public int getStudentId() { 
     return studentId; 
    } 
    public void setStudentId(int studentId) { 
     this.studentId = studentId; 
    } 
    public String getFirstName() { 
     return firstName; 
    } 
    public void setFirstName(String firstName) { 
     this.firstName = firstName; 
    } 
    public String getLastName() { 
     return lastName; 
    } 
    public void setLastName(String lastName) { 
     this.lastName = lastName; 
    } 
    public String getSpecialization() { 
     return specialization; 
    } 
    public void setSpecialization(String specialization) { 
     this.specialization = specialization; 
    } 
} 
+1

あなたはまた、生のパケットを見てみてください - 作品1としないもの - と手動の違いを見分けることができるかどうかを確認。ネットワークスニファまたはTCPDumpがここで役立ちます。 – markspace

+1

速い返答をありがとう。これはREST呼び出しであるため、WSDLファイルを作成しませんでした。 SOAP/XMLスタイルのサービスにしか必要ではないと思っていました。これは間違っていますか? –

+0

いいえ、そうではありません。 IDE Webstormを使用しているので、私のクライアントはlocalhost:63342で動作しています。私のサーバーはlocalhost:8080で動作しています。 –

答えて

1

RESTサービスメソッドの宣言を含む:

@Consumes(MediaType.APPLICATION_JSON) 

このメソッドは、「アプリケーション/ JSON」のコンテンツタイプを消費することを示しています。

このメソッドに到達するには、値が "application/json"のContent-typeヘッダーを追加する必要があります。 のような何か:

$http.post("/foo/bar", requestData, { 
     headers: { 'Content-type': 'application/json'} 
    }).success(function(responseData) { 
     //do stuff with response 
    }); 
+0

こんにちは、私はあなたの提案を試み、Content-typeヘッダーを追加しました。残念ながら、私はまだ同じ結果を得ています。 –

関連する問題