开发者问题收集

如何在 Java REST/AngularJS 前端获取 JSON

2015-01-09
3054

有人能帮我如何在 Webservice 中获取 JSON 字符串吗?我正在向我的 /api/register 发送 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));
    }

});
2个回答

您应该有一个 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 和 setter 的私有字段,但我不想增加混乱。顺便说一下, @XmlRootElement 是 JAXB 注释,而 JAX-RS 在内部使用 JAXB。

获得它之后,您只需像这样更改您的方法

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

您不需要在 AngularJS 端更改任何内容,因为 $http.post 方法的默认设置是 JSON 通信。

meskobalazs
2015-01-09

对于您的 Java 代码,您必须添加一个用户 POJO,我不知道您是否会使用某些持久性 API,因此用户 POJO 必须实现可序列化才能将用户对象输出为 JSON。

这是一个带有 EJB 的 REST 应用程序示例...: http://tomee.apache.org/examples-trunk/rest-on-ejb/README.html

对于您的客户端应用程序,您需要指定内容类型: “Content-Type”=“application/json”

请参阅此问题: 将 Content-type 更改为“application/json” POST 方法,RESTful API

Ali Ben Messaoud
2015-01-09