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()
:
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としないもの - と手動の違いを見分けることができるかどうかを確認。ネットワークスニファまたはTCPDumpがここで役立ちます。 – markspace
速い返答をありがとう。これはREST呼び出しであるため、WSDLファイルを作成しませんでした。 SOAP/XMLスタイルのサービスにしか必要ではないと思っていました。これは間違っていますか? –
いいえ、そうではありません。 IDE Webstormを使用しているので、私のクライアントはlocalhost:63342で動作しています。私のサーバーはlocalhost:8080で動作しています。 –