jax-rs: для того же метода @Path, возвращающего Json, как по-разному сериализовать для каждого типа устройства

1

Короче говоря, я хотел бы вернуть разные JSON с меньшим количеством атрибутов, когда запрос поступает с телефона, чем когда он приходит с настольного ПК.


Я хочу создать службу REST. Служба будет обслуживать данные на основе объектов JPA. Служба объявляется с помощью @Path.

В зависимости от заголовка User-Agent я хочу использовать более богатый JSON для рабочего стола, чем для мобильных устройств. Выбор выполняется сервером.

Есть ли лучший способ, чем построить второй сериализатор и использовать условие (если (request useragent) вызывать их (в каждом методе) и принудительно возвращать некоторую String вместо любого объекта (делая аннотацию @Produces не используемой).

спасибо

  • 0
    @Keerthivasan: цель состоит в том, чтобы иметь что-то, что делает это по конфигурации, чтобы код оставался простым. Я думал о различных сериализаторах, основанных на типе контента (который я бы изменял в соответствии с пользовательским агентом на уровне обратного прокси-сервера), используя @ Consumes. В идеале - один метод с одной аннотацией @ Path.
Теги:
jax-rs

2 ответа

0

Вы можете использовать селектор ресурсов jax-rs, который будет использовать разные подресурсы в зависимости от строки user-agent.

@Path("api")
public UserResource getResourceByUserAgent() {
    //the if statement will be more sophisticated obviously :-)
    if(userAgent.contains("GT-I9505") {
        return new HighEndUserResource();
    } else {
        return new LowEndUserResource();
    }
}

interface UserResource {User doSomeProcessing()}

class HighEndUserResource implements UserResource {

    @Path("process")
    public User doSomeProcessing() {
        //serve 
    }        

}

class LowEndUserResource implements UserResource {

    @Path("process")
    public User doSomeProcessing() {
        //serve content for low end
    }        
}

Вызывая ресурс "/api/process", ответ будет зависеть от userAgent. Вы также можете легко расширить решение для других устройств и, например, реализовать MiddleEndUserResource.

Вы можете прочитать дополнительную информацию о суб-ресурсах здесь:

0

Один из способов добавить PathParam или QueryParam в Путь, чтобы указать тип устройства в запросе, чтобы служба могла понять тип устройства, с которого выполняется запрос, и создать соответствующий JSON.

Пожалуйста, проверьте наиболее проголосовавший ответ "SO", чтобы узнать, является ли запрос мобильным или настольным, и добавьте параметр соответственно

Ещё вопросы

Сообщество Overcoder
Наверх
Меню