简而言之: 当来自手机的请求比来自台式机的请求时,我想返回不同的JSON,比如更少的属性。
我想构建一个REST服务。 该服务将基于JPA实体提供数据。 该服务使用@Path声明。
根据User-Agent标头,我想为桌面提供比移动设备更丰富的JSON。选择要在服务器端完成。
有没有比构建第二个序列化程序更好的方法并使用条件(if(请求useragent)来调用它们(在每个方法中)并被强制返回一些String而不是任何Object(使@Produces注释未使用)
谢谢
答案 0 :(得分:0)
向Path添加PathParam或QueryParam以告知请求中的设备类型的一种方法是,服务可以理解设备的类型,请求是并创建适当的JSON。
请检查投票最多的SO answer,以确定请求是来自移动设备还是桌面设备,并相应地添加参数
答案 1 :(得分:0)
您可以使用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。
您可以阅读有关子资源here的更多信息: