服务类具有一个@GET
接受多个参数的操作。这些参数作为查询参数传递给@GET
服务调用。
@GET
@Path("find")
@Produces(MediaType.APPLICATION_XML)
public FindResponse find(@QueryParam("prop1") String prop1,
@QueryParam("prop2") String prop2,
@QueryParam("prop3") String prop3,
@QueryParam("prop4") String prop4, ...)
这些参数的列表正在增长,因此我想将它们放入包含所有这些参数的单个bean中。
@GET
@Path("find")
@Produces(MediaType.APPLICATION_XML)
public FindResponse find(ParameterBean paramBean)
{
String prop1 = paramBean.getProp1();
String prop2 = paramBean.getProp2();
String prop3 = paramBean.getProp3();
String prop4 = paramBean.getProp4();
}
你会怎么做?这有可能吗?
您可以使用com.sun.jersey.spi.inject.InjectableProvider
。
import java.util.List;
import java.util.Map.Entry;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.ext.Provider;
import org.springframework.beans.BeanUtils;
import com.sun.jersey.api.core.HttpContext;
import com.sun.jersey.api.model.Parameter;
import com.sun.jersey.core.spi.component.ComponentContext;
import com.sun.jersey.core.spi.component.ComponentScope;
import com.sun.jersey.spi.inject.Injectable;
import com.sun.jersey.spi.inject.InjectableProvider;
@Provider
public final class ParameterBeanProvider implements InjectableProvider<QueryParam, Parameter> {
@Context
private final HttpContext hc;
public ParameterBeanProvider(@Context HttpContext hc) {
this.hc = hc;
}
@Override
public ComponentScope getScope() {
return ComponentScope.PerRequest;
}
@Override
public Injectable<ParameterBean> getInjectable(ComponentContext ic, final QueryParam a, final Parameter c) {
if (ParameterBean.class != c.getParameterClass()) {
return null;
}
return new Injectable<ParameterBean>() {
public ParameterBean getValue() {
ParameterBean parameterBean = new ParameterBean();
MultivaluedMap<String, String> params = hc.getUriInfo().getQueryParameters();
// Populate the parameter bean properties
for (Entry<String, List<String>> param : params.entrySet()) {
String key = param.getKey();
Object value = param.getValue().iterator().next();
// set the property
BeanUtils.setProperty(parameterBean, key, value);
}
return parameterBean;
}
};
}
}
在您的资源中,您只需要使用@QueryParam("valueWeDontCare")
。
@GET
@Path("find")
@Produces(MediaType.APPLICATION_XML)
public FindResponse find(@QueryParam("paramBean") ParameterBean paramBean) {
String prop1 = paramBean.getProp1();
String prop2 = paramBean.getProp2();
String prop3 = paramBean.getProp3();
String prop4 = paramBean.getProp4();
}
提供者将被自动调用。
我知道Struts2使用拦截器自动映射请求参数到动作类字段。但如果我想将一个参数映射到一个具有不同名称的操作字段,该怎么办。我想我有 如果我想将此映射到下面的字段 我怎么做这个映射。我能用吗 如果是的话,我如何在action类中获取请求对象?此外,它是否可以在带有OGNL表达式或的JSP页面中工作?在struts2配置中有没有其他方法来做这种映射?
我的动机如下: 清晰度:我不希望客户端对请求参数进行粗指处理,但仍然返回结果(就像没有提供请求参数一样) HTTP缓存:我希望限制服务的有效HTTP路由数,以便HTTP缓存(即varnish)更好地工作 例如,我可能有一个简单的控制器,它被配置为接受一个: 我现在希望我的应用程序接受请求并返回OK响应: 但我希望我的应用程序注意到还有其他未计算的请求参数,并返回一个错误响应代码。
null 建议在相关的线程入口控制器中设置,但似乎只能由群集管理员设置。 我可以使用两条路由,并为每条路由设置一个单独的cookie,但这似乎是不对的--为什么必须为两个域使用两个cookie,而实际上只有一个域具有一个身份验证? 切换到令牌身份验证? 那么,我错过了什么?处理这个问题的最佳方法是什么?
问题内容: 这个问题不太可能对将来的访客有所帮助;它仅与较小的地理区域,特定的时间段或极为狭窄的情况(通常不适用于Internet的全球受众)有关。要获得使该问题更广泛适用的帮助,请访问帮助中心。 6年前关闭。 我有一个mysql查询,但无法为其绑定参数 我已经试过了 但我收到了并且出错了: 警告:mysqli_stmt :: bind_param():类型定义字符串中的元素数量与绑定变量的数量不
如何在Spring Data Jpa中将映射映射到存储库中的查询? 下面是我的通用存储库源代码。 如下所示,我希望接收queryParams作为参数,并将queryParams对应的键和值映射到where子句。 因为它是一个GenericRepository,所以无法实现,我想把映射的内容放在@Query中。 我一直在搜索,但我找不到任何关于它的信息,所以我不知道如何解决这个问题。 如果有办法,请
我有两个实体,并使用多对一注释来映射它们,但是在使用另一个表id编写了查找对象的查询后,当我注释掉调用该应用程序的行和方法时,出现了一个错误,但是我想实现该功能,请帮助我 这些是我的实体类: 第二个实体 我的合同服务类 我的合同存储库 我在运行项目时遇到此错误 org.springframework.beans.factory.未满足的依赖异常:创建名称为“合同控制器”的bean时出错:通过字段“