gpt4 book ai didi

json - ReSTLet 使用 json 接收和响应实现 post

转载 作者:行者123 更新时间:2023-11-29 11:29:34 26 4
gpt4 key购买 nike

首先,我想知道我正在做的是正确的做法。

我有一个场景,我将收到一个 json 请求,我必须用它更新数据库,一旦数据库更新,我必须用 json 确认响应。

到目前为止,我所做的是创建类扩展应用程序,如下所示:

     @Override  
public Restlet createRoot() {
// Create a router Restlet that routes each call to a
// new instance of ScanRequestResource.
Router router = new Router(getContext());

// Defines only one route
router.attach("/request", RequestResource.class);

return router;
}

我的资源类正在扩展 ServerResource,我的资源类中有以下方法

@Post("json")
public Representation post() throws ResourceException {
try {
Representation entity = getRequestEntity();
JsonRepresentation represent = new JsonRepresentation(entity);
JSONObject jsonobject = represent.toJsonObject();
JSONObject json = jsonobject.getJSONObject("request");

getResponse().setStatus(Status.SUCCESS_ACCEPTED);
StringBuffer sb = new StringBuffer();
ScanRequestAck ack = new ScanRequestAck();
ack.statusURL = "http://localhost:8080/status/2713";
Representation rep = new JsonRepresentation(ack.asJSON());

return rep;

} catch (Exception e) {
getResponse().setStatus(Status.SERVER_ERROR_INTERNAL);
}

我首先关心的是我在实体中收到的对象是 inputrepresentation,所以当我从创建的 jsonrepresentation 中获取 jsonobject 时,我总是得到空/空对象。

我已经尝试通过以下代码以及附加的客户端传递 json 请求

function submitjson(){
alert("Alert 1");
$.ajax({
type: "POST",
url: "http://localhost:8080/thoughtclicksWeb/request",
contentType: "application/json; charset=utf-8",
data: "{request{id:1, request-url:http://thoughtclicks.com/status}}",
dataType: "json",
success: function(msg){
//alert("testing alert");
alert(msg);
}
});
};

客户端用来调用

    ClientResource requestResource = new ClientResource("http://localhost:8080/thoughtclicksWeb/request");
Representation rep = new JsonRepresentation(new JSONObject(jsonstring));
rep.setMediaType(MediaType.APPLICATION_JSON);
Representation reply = requestResource.post(rep);

对此有任何帮助或线索吗?

谢谢,拉胡尔

最佳答案

仅使用 1 个 JAR jse-x.y.z/lib/org.reSTLet.jar,您可以在客户端针对简单请求手动构造 JSON:

ClientResource res = new ClientResource("http://localhost:9191/something/other");

StringRepresentation s = new StringRepresentation("" +
"{\n" +
"\t\"name\" : \"bank1\"\n" +
"}");

res.post(s).write(System.out);

在服务器端,仅使用 2 个 JAR - gson-x.y.z.jarjse-x.y.z/lib/org.reSTLet.jar:

public class BankResource extends ServerResource {
@Get("json")
public String listBanks() {
JsonArray banksArray = new JsonArray();
for (String s : names) {
banksArray.add(new JsonPrimitive(s));
}

JsonObject j = new JsonObject();
j.add("banks", banksArray);

return j.toString();
}

@Post
public Representation createBank(Representation r) throws IOException {
String s = r.getText();
JsonObject j = new JsonParser().parse(s).getAsJsonObject();
JsonElement name = j.get("name");
.. (more) .. ..

//Send list on creation.
return new StringRepresentation(listBanks(), MediaType.TEXT_PLAIN);
}
}

关于json - ReSTLet 使用 json 接收和响应实现 post,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1352202/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com