如何在 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