Как вернуть ответ JSONArray в остальном api фреймворка Джексона?

@GET
@Produces(MediaType.APPLICATION_JSON)
public Response getData(@QueryParam("id") long id) throws Exception {
    JSONArray json = (getting some json data from db)
    ObjectMapper obj = new ObjectMapper();
    return Response.ok(obj.writeValueAsString(json)).build();
}

Я пытаюсь вернуть такой массив json, но получаю такую ​​ошибку.

com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class org.json.JSONArray and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) 

Может ли кто-нибудь помочь мне сериализовать это и дать ответ. Заранее спасибо.


person saveeth kumar    schedule 18.09.2020    source источник
comment
Взгляните на аналогичный вопрос с другой сторонней библиотекой Как вернуть N1qlQueryResult в качестве ответа REST API для базы данных Couchbase?. Вам не нужно преобразовывать объект в JSON вручную. MVC слой должен сделать это за вас. Если нет, способ должен быть, проверьте документацию. Если у вас нет POJO, вы всегда можете создать Map для представления JSON Object и List или array для представления Массив JSON.   -  person Michał Ziober    schedule 20.09.2020
comment
Вам необходимо зарегистрировать модуль json-org с помощью ObjectMapper.   -  person Paul Samsotha    schedule 21.09.2020


Ответы (1)


Если вы используете spring, вам не нужен JSONArray, просто создайте простой класс POJO со всеми getter и setter и используйте ObjectMapper для синтаксического анализа JSON в этот объект, а затем напишите класс POJO в ответ, как показано ниже:

public ResponseEntity<DummyObject> getData(@QueryParam("id") long id) throws Exception 
    DummyPojo obj = mapper.readValue(json, DummyPojo.classs);
    return ResponseEntity.ok(obj)
}

// Replace DummyObject with your class

Spring автоматически конвертируется в json. Для получения дополнительной информации перейдите по этой ссылке.

person code_mechanic    schedule 18.09.2020
comment
Я согласен с вашим ответом и знаю об этом. Но здесь мое требование - обойтись без класса POJO. - person saveeth kumar; 20.09.2020
comment
Но проблема с JSONObject и JSONArray заключается в том, что они не могут быть преобразованы в json, поскольку у них нет получателя / установщика или любого другого способа, который Джексон использует для десериализации / сериализации в json, а Джексон по умолчанию зарегистрирован как сериализатор / десериализатор json, поэтому это было бы сложно для достижения и может потребоваться некоторая дополнительная конфигурация или код. - person code_mechanic; 20.09.2020
comment
Если у вас уже есть строка json, не конвертируйте ее в JSONArray или JSONObject, просто напишите ее в ответ напрямую и верните String из функции, которая должна работать. - person code_mechanic; 20.09.2020