我尝试从angular js使用java jersey web服务。在呼叫者ws
的一部分下面 UserService.getProfilUser(GLOBALS.DEFAULT_CLIENT_IP,JSON.stringify($rootScope.user),JSON.stringify($rootScope.magasins[0])).then(function(response){
$scope.profilUser=response;
})
在UserService
中的getProfilUser函数下面 this.getProfilUser=function(clientIP,user,magasin)
{
var deferred=$q.defer();
$http.get(url+'user/getUserProfil?clientIP='+clientIP+'&user='+user+'&magasin='+magasin).success(function(response){
deferred.resolve(response)
}).error(function(err){
deferred.reject(err);
})
return deferred.promise;
}
在我的服务器端和我遇到问题的地方,我使用@BeanParam将我的Json对象映射到我的bean
低于getUserProfil
ws
@GET
@Path("getUserProfil")
@Consumes(MediaType.APPLICATION_JSON)
public Profil getUserProfilWithRCAccess(@QueryParam("clientIP")String clientIP, @BeanParam User user,@BeanParam Magasin magasin){
System.out.println("ClientIP "+clientIP);
System.out.println("User "+user.getEmploi());
System.out.println("Magasin "+magasin.getLbMaga());
}
但是
System.out.println("User "+user.getEmploi())==>null
System.out.println("Magasin "+magasin.getLbMaga())==>null
我该如何解决?
答案 0 :(得分:2)
如果您正在使用
@QueryParam("clientIP")String clientIP
代表clientIP
,您正在设置用户和magasin
getUserProfil?clientIP='+clientIP+'&user='+user+'&magasin='+magasin
是什么让你认为使用@BeanParam
是正确的。有关如何正确使用此批注,请参阅this post。它不是神奇地将JSON变成POJO。
@QueryParam
适用于query string值,而这正是您所拥有的。使用该注释,你只能注入一个字符串(这就是为什么clientId
没问题),除非你有
fromString(String)
方法,或valueOf(String)
,或ParamConverter
。见more about that here。在任何一种情况下,您都需要自己解析JSON,最有可能使用一些JSON到POJO框架,如Jackson。 another good article用于使用ParamConverter
用例。
您的方法适用于GET
请求。你不能@Consumes
任何东西。这是请求正文的Content-Type
。 GET请求没有正文。这主要是针对@POST
和@PUT
请求。在这种情况下,您将遇到完全其他问题。
答案 1 :(得分:1)
我也是REST和球衣的新手并且正在努力学习。据我了解上述讨论,我认为您实施的方式并不正确。您希望将JSON对象(user& Magasin)作为查询参数发送,并且希望在jersey中使用@BeanParam
当我读到有关BeanParam的方法时,它采用jsp表单中的值并设置为bean(Book),并将此bean作为@BeanParam传递。
这里是示例BeanParam Example
可能会有所帮助。