2016-09-17 2 views
1

저는 AngularJS에서 며칠 동안 HTTP POST을 작동 시키려고했습니다. 나는 정말로 당황했고, 나는 어떤 통찰력도 정말로 고맙게 여길 것이다! 서버 측에서는 JAX-RS와 Jersey를 사용하고 있습니다. 전달할 객체는 application/json이고, Java 클래스 Student을 생성했습니다 (자세한 내용은 아래 코드를 참조하십시오). 내 목표는 AngularJS에서 서버로 Student 개체를 게시하는 것입니다.Java REST HTTP POST는 말풍선에서 작동하지만 AngularJS에서는 작동하지 않습니다.

내 논리가 서버 측에서 소리가 났는지 확인하기 위해 Google Apps의 REST API 클라이언트와 Unix Command curl을 사용했습니다. 두 가지 방법 모두 HTTP 상태 200을 반환했습니다. 그러나 AngularJS에서 동일한 것을 시도한 경우 HTTP POST에 데이터가없고 상태 -1이있는 Response 개체가있는 오류가 발생합니다. 게시 요청은 서버에 도달 한 것으로 보이는데 이는 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 클래스 정의 :

,451,515,
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

+1

빠른 답장을 보내 주셔서 감사합니다. REST 호출이므로 WSDL 파일을 만들지 않았습니다. SOAP/XML 스타일 서비스에만 필요하다고 생각했습니다. 이것은 틀린가? –

+0

아니요. IDE Webstorm을 사용하고 있기 때문에 클라이언트가 localhost : 63342에서 실행 중입니다. 내 서버가 localhost : 8080에서 실행 중입니다. –

답변

1

나머지 서비스 메소드의 선언은 다음과 같습니다

@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 헤더를 추가했습니다. 불행히도, 나는 여전히 같은 결과를 얻습니다. –

관련 문제