如何在 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 通信。
谁能帮我如何在 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 通信。