Как читать данные, отправленные клиентом с помощью Spark?

Мне нужно прочитать некоторые данные, отправленные клиентом с помощью 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, поэтому мне нужно только определить маршрут. Я хотел бы сохранить в базе данных данные, отправленные клиентом, но все атрибуты равны нулю.

Я думаю, что этот путь неверен. Как я могу прочитать отправленные данные?


person user2598816    schedule 19.07.2013    source источник


Ответы (4)


При отправке данных с помощью HTTP POST вы отправляете JSON как тело запроса, а не как атрибуты запроса. Это означает, что вы не должны использовать request.attribute("item") и другие, а вместо этого анализируете тело запроса в объект Java. Вы можете использовать этот объект для создания element и сохранить его с помощью DAO.

person mthmulders    schedule 19.07.2013

Вам понадобится что-то вроде этого:

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

}
person Dherik    schedule 08.05.2015
comment
Я думаю, было бы лучше иметь один глобальный экземпляр Gson, чтобы не создавать экземпляр при каждом запросе. - person TheRealChx101; 30.10.2018

попробуйте использовать request.queryParams("item") и так далее.

person Andy    schedule 12.09.2014
comment
Это для запросов GET. - person TheRealChx101; 28.10.2018

Предполагая, что это 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);
    }
person shantanusinghal    schedule 06.02.2016