Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.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
Rest 如何在cxf中的消息体中设置自定义对象?_Rest_Cxf - Fatal编程技术网

Rest 如何在cxf中的消息体中设置自定义对象?

Rest 如何在cxf中的消息体中设置自定义对象?,rest,cxf,Rest,Cxf,我有一个REST Web服务,带有自定义方法(GET) 正如您所看到的,这个方法只有一个参数。这是我的自定义对象 对象UIParameters是根据作为查询字符串提供的参数构建的 例如 UIParameters对象将包含一个字段: UIParameters { String objectType = "article"; } 我已经尝试使用InInterceptor从URL获取此参数,构建UIParameter对象并设置消息的内容。不幸的是,它不起作用。 之后,我为UIParameter

我有一个REST Web服务,带有自定义方法(GET)

正如您所看到的,这个方法只有一个参数。这是我的自定义对象

对象UIParameters是根据作为查询字符串提供的参数构建的

例如

UIParameters对象将包含一个字段:

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();
}