泽西岛 - 来自HTTP标头的Marshal对象

时间:2013-07-17 14:14:17

标签: java jersey jax-rs

是否可以让Jersey使用一系列HTTP标头并将它们编组到POJO中,就像使用POST参数一样?

4 个答案:

答案 0 :(得分:4)

如果你正在使用jersey 1.x那么你可以使用@InjectParam, 但我建议你升级到2.x并开始使用@BeanParam

答案 1 :(得分:2)

如果您希望以@HeaderParam的身份访问特定的String,请使用@Juned Ahsan或@DJ Spiess提供的答案。如果你想将它们注入POJO,我建议你在2.x中使用泽西岛的@BeanParam

例如:

@Path("/foo")
public class FooResource {
    @GET
    @Path("/bar")
    public void bar(@BeanParam MyBean myBean) {
      // Do something
    }
}

public class MyBean {
    private String uaCompatible;

    public MyBean(@HeaderParam("X-UA-Compatible") String uaCompatible) {
        this.uaCompatible = uaCompatible;
    }

    public String getUacompatible() {
        return this.uaCompatible;
    }
}
对于泽西1.x(> = 1.4),@BeanParam可以替换为@InjectParam,而在1.4之前的1.x中,@Inject可以替换为@Inject。如果您正在使用依赖注入框架(如Spring),也可以使用javax - {{1}}。

答案 2 :(得分:1)

是的,你会这样做的。 (来自http://www.mkyong.com/webservices/jax-rs/get-http-header-in-jax-rs/

@Path("/users")
public class UserService {

@GET
@Path("/get")
public Response addUser(@HeaderParam("user-agent") String userAgent) {
        return Response.status(200)
            .entity("addUser is called, userAgent : " + userAgent)
            .build();

    }

}

答案 3 :(得分:0)

是的,您可以使用@HeaderParams

执行此操作