在jersey中使用get方法发送json对象

时间:2015-05-07 15:52:02

标签: json angularjs jersey jax-rs jersey-2.0

我尝试从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

我该如何解决?

2 个答案:

答案 0 :(得分:2)

如果您正在使用

@QueryParam("clientIP")String clientIP

代表clientIP,您正在设置用户和magasin

getUserProfil?clientIP='+clientIP+'&user='+user+'&magasin='+magasin

是什么让你认为使用@BeanParam是正确的。有关如何正确使用此批注,请参阅this post。它不是神奇地将JSON变成POJO。

@QueryParam适用于query string值,而这正是您所拥有的。使用该注释,你只能注入一个字符串(这就是为什么clientId没问题),除非你有

  • bean类中的构造函数,它接受String或
  • 返回bean类型的静态fromString(String)方法,或
  • 返回bean类型的静态valueOf(String),或
  • bean类型的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

可能会有所帮助。