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

How to get JSON in Java REST / AngularJS frontend

谁能帮我如何在 Web 服务中获取 JSON 字符串。我正在向我的 /api/register 发送 JSON,它看起来像:

{"name":"MyName","surname":"MySurename","email":"mail@asd.de","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));
    }

});

对于您的 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

您应该有一个 POJO,它映射到接收到的 JSON 对象,例如 User class。在这种情况下,这将是一个非常简单的 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 通信。