powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Почему через REST не шлется JsonObject?
6 сообщений из 6, страница 1 из 1
Почему через REST не шлется JsonObject?
    #38983263
RuslanGab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Разбираюсь с рест. Написал нечто элементарное для тестов, и логика мне в одном месте не ясна. Вот сервер, что принимает запрос:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
@Stateless
@Path("entities.customer")
public class CustomerFacadeREST extends AbstractFacade<Customer> {
    @PersistenceContext(unitName = "TestRestServerPU")
    private EntityManager em;

    public CustomerFacadeREST() {
        super(Customer.class);
    }

    @POST
    @Consumes({"application/json"})
    public void create(JsonObject jsonObj) {
        System.out.println("I got JSON:   " + jsonObj.toString());
    }


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
public class TestRestClient {

    public static void main(String[] args) {        
        TestRestClient testRest = new TestRestClient();
        testRest.testSend();
    }
    
    public void testSend() {
        JsonObject jsonObject = Json.createObjectBuilder()
                .add("userName", "user")
                .add("password", "secret")
                .build();
        System.out.println(jsonObject.toString());        

        String url = "http://localhost:8080/TestRestServer/webresources/entities.customer/";
        
        Client client = ClientBuilder.newClient();          
        client.register(jsonObject);
        WebTarget clientTarget = client.target(url);
        
        Builder invocationBuilder  = clientTarget.request(MediaType.APPLICATION_JSON);
        
        Response response = invocationBuilder.post(Entity.entity(jsonObject.toString(), MediaType.APPLICATION_JSON));
    }
}



Вот в таком виде все отрабатывается нормально, НО если я передаю в response просто jsonObject не в виде String (что для меня как бы логично если я его, собственно, и хочу отправить и заявляю как тип того что я отправляю...), вылетает ошибка
Exception in thread "main" org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyWriter not found for media type=application/json...

Собственно вопрос: а почему стринги летят как надо (и на сервере нормально принимаются как объект JSON и к слову парсятся - проблем нет), а объект отправить не удается?

Ну и если еще кто подскажет где почитать про то как поверх реста поработать с sessinId или headers буду весьма признателен - что-то я совсем торможу - сорри я джун совсем-совсем:(
...
Рейтинг: 0 / 0
Почему через REST не шлется JsonObject?
    #38983268
RuslanGab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сделал JsonObject Serializable - результат тот же:(
...
Рейтинг: 0 / 0
Почему через REST не шлется JsonObject?
    #38983350
yelena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сериализовать JsonObject нечем.

Может, и не нужен вам JsonObject.

Посмотрите примеры http://www.mkyong.com/webservices/jax-rs/json-example-with-jersey-jackson/
http://www.mkyong.com/webservices/jax-rs/restful-java-client-with-jersey-client/

В клиенте сериализованный объект как строка принимается.
...
Рейтинг: 0 / 0
Почему через REST не шлется JsonObject?
    #38983381
RuslanGab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
yelena,

Спасибо за ответ, но там насколько я вижу строка ("{\"singer\":\"Metallica\",\"title\":\"Fade To Black\"}") и передается. Оно так и у меня готово работать, я же хотел бы слать объект и так и не могу понять что мешает ему отправиться:(
Неужели же я первый человек который этим заинтересовался!? Ну или (что скорее) у всех просто все работает, но я убей не могу осознать что неверно у меня в таком случае, так что все еще прошу помощи.
...
Рейтинг: 0 / 0
Почему через REST не шлется JsonObject?
    #38983442
yelena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот вы сначала с REST и RESTful веб-сервисами в теории разберитесь.

Запросы и ответы у RESTful веб-сервисов передаются по протоколу HTTP. Протокол HTTP используется для передачи произвольных данных.

В вашем случае данные пересылаются в формате, отличном от того, в котором они хранятся на сервере. (MediaType.APPLICATION_JSON)

В вашем случае - Content-Type: application/json

JSON (JavaScript Object Notation) - текстовый формат обмена данными. Объект сериализуется в текст.

{"singer":"Metallica","title":"Fade To Black"} - это представление объекта в формате JSON

JavaScript Object Notation (JSON) is a text format for the serialization of structured data. ( https://tools.ietf.org/html/rfc4627)

Объект сериализуется в текст без вашего участия.

Jersey - the JAX-RS Reference Implementation from Sun. (Реализация JSR-311)

В ней реализованы MessageBodyWriters и MessageBodyReaders не для всех возможных форматов данных. Для JsonObject нет MessageBodyWriter'а, чтобы автоматически сериализовать его в формат application/json.

POJO suppport represents the easiest way to convert your Java Objects to JSON and back. It is based on the Jackson library. ( https://jersey.java.net/documentation/1.19/json.html)

org.json.JsonObject - не является POJO, там для его полей геттеры и сеттеры отсутствуют. Скорее всего, поэтому он автоматически не сериализуется.
...
Рейтинг: 0 / 0
Почему через REST не шлется JsonObject?
    #38985000
RuslanGab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
yelena,

твоя правда: джексон решает такие вопросы:) Спасибо!
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Почему через REST не шлется JsonObject?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]