gpt4 book ai didi

java - 使用spark从请求中提取参数数据

转载 作者:行者123 更新时间:2023-12-02 13:42:53 25 4
gpt4 key购买 nike

因此,我正在尝试构建一个简单的 REST API,并想尝试 Spark,但由于某种原因,我似乎无法提取任何参数。

这是我测试这个的端点:

    post("/hello", (req, res) -> {

String str = req.attribute(":username"); //TODO THIS IS ALWAYS NULL!!!!!!!
System.out.println(str);
System.out.println("BODY IS WORKING:");
System.out.println(req.body().toString());
return "PANNKAKA";
});

现在,如果我尝试使用正文向 http://localhost:4567/hello 发出请求 { “用户名”:“bla”},str 变量只是 null。但是,如果我调用 req 上的 body 方法,req.body().toString(); 它确实得到了正文:{ “用户名”:“bla”} 打印到控制台。所以 body 正在通过。

这是控制台窗口中的结果:

null
BODY IS WORKING:
[
{
"username": "bla"
}
]

那么如何从请求正文中提取参数呢?我已经尝试了很多不同的参数名称格式,但它不起作用。已经坐了几个小时了!

我查看了文档,我相信我做了正确的事情: http://sparkjava.com/documentation.html

最佳答案

我想有几种方法可以做到这一点。另外,你没有提到它,因为我假设你发送的数据格式为 JSON。我使用 ObjectMapper(使用此包com.fasterxml.jackson.databind.ObjectMapper)和 PayLoad 类来完成此操作。

我创建了一个简单的类用作 PayLoad。它只包含字段及其 getter 和 setter。对于您在 JSON 中发送的每个值,您将创建相应的字段,其名称完全相同(在您的情况下,您将有一个名为 username 的字段),然后对象映射器映射 JSON您从客户端发送到此类模式。示例:

public class UserPayload {

private long id;
private String username;

public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}

然后我使用对象映射器将请求正文解析到此有效负载中:

class SomeClass {
...
private static Object postUser(Request req, Response res) throws JSONException {

ObjectMapper mapper = new ObjectMapper();
UserPayload pl = null;
try {
pl = mapper.readValue(req.body(), UserPayload.class); // <------
} catch (JsonMappingException e1) {
...
} catch (Exception e2) {
...
}

System.out.println(pl.getUsername() + " " + pl.getId());
...
}
}

当然还要注册您的路线:

post("/hello", SomeClass::postUser);

希望有帮助。如果有人使用更简单的方法,我会很高兴听到。

关于java - 使用spark从请求中提取参数数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42630651/

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