我必须使用Spark(Java框架)读取客户端发送的一些数据。
这是客户的帖子请求代码。我正在使用jQuery。
$.post("/insertElement",
{item:item.value, value: value.value, dimension: dimension.value });
服务器代码:
post(new Route("/insertElement") {
@Override
public Object handle(Request request, Response response) {
String item = (String) request.attribute("item");
String value = (String) request.attribute("value");
String dimension = (String) request.attribute("dimension");
Element e = new Element(item, value, dimension);
ElementDAO edao = new ElementDAO();
edao.insert(e);
JSONObject json = JSONObject.fromObject( e );
return json;
}
});
我正在使用Spark,所以我只需要定义路线。 我想在数据库中存储客户端发送的数据,但所有属性都为空。
我认为这种方式不正确。如何阅读发送的数据?
答案 0 :(得分:7)
他们使用HTTP POST
发送您的数据,您将JSON发布为请求正文,而不是请求属性。这意味着您不应该使用request.attribute("item")
和其他人,而是将请求主体解析为Java对象。您可以使用该对象创建element
并使用DAO
存储它。
答案 1 :(得分:3)
你需要这样的东西:
post(new Route("/insertElement") {
@Override
public Object handle(Request request, Response response) {
String body = request.body();
Element element = fromJson(body, Element.class);
ElementDAO edao = new ElementDAO();
edao.insert(e);
JSONObject json = JSONObject.fromObject( e );
return json;
}
});
public class Element {
private String item;
private String value;
private String dimension;
//constructor, getters and setters
}
public class JsonTransformer {
public static String toJson(Object object) {
return new Gson().toJson(object);
}
public static <T extends Object> T fromJson(String json, Class<T> classe) {
return new Gson().fromJson(json, classe);
}
}
答案 2 :(得分:1)
尝试使用request.queryParams(&#34; item&#34;)等等。
答案 3 :(得分:0)
假设这是我在请求中发送的JSON
{ 'name': 'Rango' }
这就是我将Controller配置为解析请求正文的方式。
public class GreetingsController {
GreetingsController() {
post("/hello", ((req, res) -> {
Map<String, String> map = JsonUtil.parse(req.body());
return "Hello " + map.get("name") + "!";
})));
}
}
public class JsonUtil {
public static Map<String, String> parse(String object) {
return new Gson().fromJson(object, Map.class);
}