Разрешить сериализацию массива в JAX RS без Spring - PullRequest
0 голосов
/ 07 июня 2018

Мне нужно создать простой интерфейс REST для базы данных для переноса данных.Я сгенерировал сущностные классы и bean-компоненты из базы данных с Netbeans и написал несколько простых REST-сервисов.Затем я столкнулся с проблемой сериализации с Jettison, где списки только с одним элементом не сериализуются в виде списков.

Я нашел решения этой проблемы, которые, кажется, требуют, чтобы Spring переопределил поставщика сериализации или перенастроил Jettison."serializeAsArray" и "arrayKeys".

Есть ли способ использовать Джексона или настроить Jettison без необходимости в среде Spring?

Вот определение службы REST:

@Path("/reseller")
@Produces({"application/json;charset=utf-8"})
public class ResellerWS {

@EJB
private ResellerFacade reseller;

@Path("/{id}")
@GET
public Reseller get(@PathParam("id") long id)
{
    ResellerReseller result = reseller.find(id);
    return result;
}

Это часть сущности, которая имеет значение.resellerdepartmentList не сериализуется как список с одной записью, а только как сама запись:

@OneToMany(mappedBy = "resellerId", fetch = FetchType.EAGER)
private List<Resellerdepartment> resellerdepartmentList;

...

public List<Resellerdepartment> getResellerdepartmentList() {
    return resellerdepartmentList;
}

Служба работает под управлением TomEE Plus 1.7.4

1 Ответ

0 голосов
/ 07 июня 2018

Есть ли способ использовать Джексон или настроить Jettison без необходимости в Spring Framework?

Я настоятельно советую вам использовать Джексон вместо Jettison, и он не нуженSpring для настройки.


Чтобы использовать Джексона в качестве JSON-провайдера для JAX-RS, добавьте артефакт jackson-jaxrs-json-provider в зависимости вашего проекта:

<dependency>
    <groupId>com.fasterxml.jackson.jaxrs</groupId>
    <artifactId>jackson-jaxrs-json-provider</artifactId>
    <version>2.9.5</version>
</dependency>

Этот модуль содержит класс JacksonJsonProvider, который является базовой реализацией абстракций JAX-RS (MessageBodyReader и MessageBodyWriter), необходимых для привязкиСодержимое JSON в и из объектов Java.

Чтобы настроить ObjectMapper в JAX-RS, вы можете создать реализацию ContextResolver.Он будет подхвачен аннотацией JacksonJsonProvider:

@Provider
public class ObjectMapperContextResolver implements ContextResolver<ObjectMapper> {

    private final ObjectMapper mapper;

    public ObjectMapperContextResolver() {
        this.mapper = createObjectMapper();
    }

    @Override
    public ObjectMapper getContext(Class<?> type) {
        return mapper;
    }

    private ObjectMapper createObjectMapper() {
        ObjectMapper mapper = new ObjectMapper();
        // Configure as per your needs
        return mapper;
    }
}

. @Provider обозначает реализацию интерфейса расширения, который должен быть обнаруженJAX-RS время выполнения.Кроме того, вы можете зарегистрировать провайдеров в вашем классе, который расширяет Application.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...