【发布时间】:2016-05-11 02:00:55
【问题描述】:
我在 ResourceA 中调用 ResourceB。
两者都使用相同的查询参数“param1”。
如何在调用 ResourceB 之前更改 ResourceA 中“param1”的值。
代码如下:
package com.example;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.Request;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.ResponseBuilder;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import com.sun.jersey.api.core.ResourceContext;
public abstract class MyResource {
ResponseBuilder response;
Request request;
protected String param1;
public MyResource(@QueryParam("param1") String param1, @Context Request request) {
this.param1 = param1;
this.request = request;
this.response = Response.ok();
}
}
public class ResourceA extends MyResource {
public ResourceA(String param1, Request request) {
super(param1, request);
}
@Context private ResourceContext rc;
public Response postJSON(String postData) {
JSONObject data = JSONObject.fromObject(postData);
if (data.has("resourceB")) {
ResourceB resourceB = rc.getResource(ResourceB.class);
// resourceB.setQueryParams("param1", "my new param 1");
resourceB.postJSON(data.getJSONArray("resourceB"));
}
}
}
public class ResourceB extends MyResource {
public ResourceB(String param1, Request request) {
super(param1, request);
}
public Response postJSON(JSONArray data) {
// this.params1 should not be "my new param 1"
}
}
【问题讨论】:
-
我不确定你想在这里做什么。什么不适用于您的代码? ResourceB 中 param1 的预期值是多少?你可以简单地设置
resourceB.param1 = ...,我错过了什么吗? -
是的,这就是我现在正在做的事情。问题是如果 ResourceB 调用 ResourceC,我需要再次传递 param1。如果我能够更改请求的查询参数的值,我只需要在 ResourceA 中执行一次。
-
你可以改变 ResourceA 的构造函数,所以当它被实例化时,值会在一个地方被修改
-
不应为 ResourceA 的每个路径修改它,并且在构造函数中新值是未知的。
标签: java json web-services rest jersey