Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java jax-rs:对于返回Json的同一@Path方法,如何按设备类型进行不同的序列化_Java_Json_Jax Rs - Fatal编程技术网

Java jax-rs:对于返回Json的同一@Path方法,如何按设备类型进行不同的序列化

Java jax-rs:对于返回Json的同一@Path方法,如何按设备类型进行不同的序列化,java,json,jax-rs,Java,Json,Jax Rs,简言之: 当一个请求来自手机时,我想返回不同的JSON,比如属性更少,而不是来自台式pc 我想建立一个REST服务。 该服务将提供基于JPA实体的数据。 服务是用@Path声明的 根据用户代理头,我希望为桌面提供比移动设备更丰富的JSON。要在服务器端完成的选择 有没有比构建第二个序列化程序并使用条件ifrequest useragent在每个方法中调用它们并强制返回一些字符串而不是任何使@products注释未使用的对象更好的方法呢 感谢您一种方法是在路径中添加一个或,以告知请求中的设备类型,

简言之: 当一个请求来自手机时,我想返回不同的JSON,比如属性更少,而不是来自台式pc

我想建立一个REST服务。 该服务将提供基于JPA实体的数据。 服务是用@Path声明的

根据用户代理头,我希望为桌面提供比移动设备更丰富的JSON。要在服务器端完成的选择

有没有比构建第二个序列化程序并使用条件ifrequest useragent在每个方法中调用它们并强制返回一些字符串而不是任何使@products注释未使用的对象更好的方法呢

感谢您

一种方法是在路径中添加一个或,以告知请求中的设备类型,这样服务就可以了解请求所基于的设备类型,并创建相应的JSON


请检查投票最多的请求,以确定请求是来自移动还是桌面,并相应地添加参数

您可以使用jax rs资源选择器,它将根据用户代理字符串使用不同的子资源

@Path("api")
public UserResource getResourceByUserAgent() {
    //the if statement will be more sophisticated obviously :-)
    if(userAgent.contains("GT-I9505") {
        return new HighEndUserResource();
    } else {
        return new LowEndUserResource();
    }
}

interface UserResource {User doSomeProcessing()}

class HighEndUserResource implements UserResource {

    @Path("process")
    public User doSomeProcessing() {
        //serve 
    }        

}

class LowEndUserResource implements UserResource {

    @Path("process")
    public User doSomeProcessing() {
        //serve content for low end
    }        
}
通过调用/api/process资源,响应将取决于userAgent。您还可以轻松地将解决方案扩展到其他设备,例如实现MiddleEndUserResource


您可以阅读有关子资源的更多信息:

@Keerthivasan:目标是通过配置实现某种功能,从而使代码保持简单。我想到了基于内容类型的不同序列化程序,我将根据反向代理级别的用户代理使用@Consumes更改这些内容类型。理想的方法是一个带有@Path注释的方法。