How read data sent by Client with Spark?

a 夏天 提交于 2019-12-12 09:42:43

问题


I have to read some data sent by Client using Spark (a framework for Java).

This is the code of client's post request. I am using jQuery.

$.post("/insertElement", 
{item:item.value, value: value.value, dimension: dimension.value });

The code of server:

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; 
        }
    });

I am using Spark so I only have to define the route. I would like to store in a database the data sent by client, but all the attributes are null.

I think that this way isn't correct. How can I read the sent data?


回答1:


They way you send your data, using HTTP POST, you're posting the JSON as request body, not as request attributes. This means you shouldn't use request.attribute("item") and the others, but instead parse the request body to a Java object. You can use that object to create the element and store it using the DAO.




回答2:


You will need something like this:

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);
    }

}



回答3:


try using request.queryParams("item") and so on.




回答4:


Assuming this is the JSON I'm sending in my request

    { 'name': 'Rango' }

This is how I've configured my Controller to parse request body.

    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);
    }


来源:https://stackoverflow.com/questions/17742633/how-read-data-sent-by-client-with-spark

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!