Rest 如何在cxf中的消息体中设置自定义对象?
我有一个REST Web服务,带有自定义方法(GET) 正如您所看到的,这个方法只有一个参数。这是我的自定义对象 对象UIParameters是根据作为查询字符串提供的参数构建的 例如 UIParameters对象将包含一个字段:Rest 如何在cxf中的消息体中设置自定义对象?,rest,cxf,Rest,Cxf,我有一个REST Web服务,带有自定义方法(GET) 正如您所看到的,这个方法只有一个参数。这是我的自定义对象 对象UIParameters是根据作为查询字符串提供的参数构建的 例如 UIParameters对象将包含一个字段: UIParameters { String objectType = "article"; } 我已经尝试使用InInterceptor从URL获取此参数,构建UIParameter对象并设置消息的内容。不幸的是,它不起作用。 之后,我为UIParameter
UIParameters {
String objectType = "article";
}
我已经尝试使用InInterceptor从URL获取此参数,构建UIParameter对象并设置消息的内容。不幸的是,它不起作用。
之后,我为UIParameters提供了MessageBodyReader,但它仍然不起作用
我应该做些什么来实现这个目标
谢谢
更新:
在InInterceptor中,我已将查询字符串复制到http头。现在,可以在my MessageBodyReader中访问用户位置参数的URL的一部分。在这里,我可以构建我的对象参数
一切都很好,但我不认为这个解决方案是最好的
有人知道更好的解决方案吗?注释QueryParam(“”
允许获取所有注入的查询参数
您不需要拦截器,这不是推荐的方式。请参阅CXF文档
如果您想使用查询参数自己构建bean,请使用@Context-UriInfo
注释
@GET
@Path("/custom")
public UIResponse custom( @Context UriInfo uriInfo){
MultivaluedMap<String, String> params = uriInfo.getQueryParameters();
new UIParameters().Builder()
.objectType(params.getFirst("type"))
.build();
}
@GET
@路径(“/custom”)
公共UIResponse自定义(@Context-UriInfo-UriInfo){
多值Map params=uriInfo.getQueryParameters();
新建UIParameters().Builder()
.objectType(params.getFirst(“类型”))
.build();
}
谢谢。当然,这是最好的方法,但不幸的是,我想使用生成器模式,所以我不能使用setter。尝试不使用setter。我通过自定义复制了它们,但可能不需要查看文档如何调用所有链,例如新的UIParameters().Builder().objectType(“type”).build();我想在设置所有字段后验证整个对象。@QueryParam
由JAX-RS实现管理。这意味着对象创建是在调用方法之前执行的。如果您想自己根据查询参数构建bean,请使用@Context-UriInfo
参见更新的答案谢谢您pedrofb。你的解决方案非常有用。这太棒了。我在以前版本的应用程序中使用过这种方法。不幸的是,我必须为消费者提供java客户端,并且我想要使用公共接口,因此我不能使用UriInfo类作为参数。
@GET
@Path("/custom")
public UIResponse custom(@QueryParam("") UIParameters uiParameters)
class UIParameters {
String objectType;
}
@GET
@Path("/custom")
public UIResponse custom( @Context UriInfo uriInfo){
MultivaluedMap<String, String> params = uriInfo.getQueryParameters();
new UIParameters().Builder()
.objectType(params.getFirst("type"))
.build();
}