4

我必须使用 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,所以我只需要定义路线。我想将客户端发送的数据存储在数据库中,但所有属性均为空。

我认为这种方式是不正确的。如何读取发送的数据?

4

4 回答 4

7

他们使用 HTTP 发送数据的方式POST,您将 JSON 作为 request body发布,而不是作为 request attributes发布。这意味着您不应该使用request.attribute("item")和其他人,而是将请求正文解析为 Java 对象。您可以使用该对象创建element并使用DAO.

于 2013-07-19T09:39:07.127 回答
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);
    }

}
于 2015-05-08T00:28:49.147 回答
1

尝试使用 request.queryParams("item") 等等。

于 2014-09-12T00:58:23.050 回答
0

假设这是我在请求中发送的 JSON

    { 'name': 'Rango' }

这就是我将控制器配置为解析请求正文的方式。

    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);
    }
于 2016-02-06T20:49:21.870 回答