2015-01-09 59 views
0

有人可以幫助我如何在Web服務中獲取JSON字符串。一世的JSON發送到我的/ API /註冊,看起來像:如何在Java REST/AngularJS前端獲取JSON

{"name":"MyName","surname":"MySurename","email":"[email protected]","street":"MyStreet","number":"3","zip":"12345","city":"myCity","pass":"myPassword"} 

這裏是我的register.java文件:

@Path("/register") 
@Stateless 
public class RegisterWS { 

    @EJB 
    UserBS userBS; 

    @POST 
    @Consumes(MediaType.APPLICATION_JSON) 
    public void createUser(){ 

     // code to get data from json 

     userBS.createUser(name, surename, email, adress, number, zip, city, password); 

    } 
} 

我AngularJS控制器和服務。數據來自一個表單,它被解析爲一個JSON對象。

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

    return {   

     registerUser : function(user) { 

      $http.post('http://localhost:8080/myApp/api/register') 
        .success(function (user) { 
         return user; 
        }) 
        .error(function (data) { 
         // failed 

        }); 
     } 

    } 

}); 

app.controller('RegisterCtrl', function($scope, RegisterService) { 

    $scope.register = function(){ 
     RegisterService.registerUser(angular.toJson($scope.user)); 
    } 

}); 

回答

1

你應該有一個POJO,它映射到接收到的JSON對象,例如User類。在這種情況下,這將是一個非常簡單的Java Bean,JSON中每個字段的屬性通常爲String

@XmlRootElement 
public class User { 
    String name; 
    String surname; 
    String email; 
    String street; 
    Integer number; 
    String zip; 
    String city; 
    String pass; 
} 

當然你會使用私人領域,與getter和setters,但我不想增加混亂。順便說一下,@XmlRootElement是JAXB註釋,JAX-RS在內部使用JAXB。

你必須在這之後,你只需要改變你的方法是這樣

@POST 
@Consumes(MediaType.APPLICATION_JSON) 
public void createUser(User user) { 
    ... 
} 

你不應該需要在AngularJS側改變任何東西,因爲默認的$http.post方法是JSON溝通。

+0

我有一個POJO,只是沒有把@XmlRootElement放在它上面。非常感謝! – eScoo

0

對於Java代碼,您必須添加一個用戶POJO,我不知道你是否會使用一些持久性API與否,因此用戶必須POJO實現序列化,以輸出用戶對象爲JSON。

這裏有一個與EJB REST應用程序的例子...:http://tomee.apache.org/examples-trunk/rest-on-ejb/README.html

爲了您的客戶端應用程序,你需要指定的內容類型:"Content-Type" = "application/json"

看到這個問題:change Content-type to "application/json" POST method, RESTful API