Джерси Условный путь - PullRequest
       20

Джерси Условный путь

0 голосов
/ 08 октября 2019

У меня есть сценарий, в котором мы поддерживаем 2 разных типа аутентифицированных пользователей (UserTypeA, UserTypeB), но они никогда не будут использоваться в одной серверной среде. Прямо сейчас мы используем 2 разных пути URL /path/usertypea/list против /path/usertypeb/list. Мы бы хотели, чтобы они использовали один и тот же путь, если это возможно, например, /path/list, и чтобы переменная окружения была условием, чтобы знать, куда направлять трафик. Параметры для каждого типа пользователей не совсем одинаковы, есть некоторые различия в том, как организованы данные. Мы используем Джерси.

Я пробовал несколько вещей, таких как классы Singleton: https://eclipse -ee4j.github.io / jersey.github.io / documents / latest / user-guide. html # d0e2650 / https://stackoverflow.com/a/33585724/12183373 но он никогда не маршрутизирует значение, он просто возвращает имя класса вместо ожидаемой полезной нагрузки JSON.

Вот часть кода:

@Path("/list")
public class GlobalSegmentServiceRouter {
    @GET
    @Produces("application/json")
    public Class<?> findAll() {
        boolean isUserTypeA = false;
        if (isUserTypeA) {
            return UserTypeAService.class;
        } else {
            return UserTypeBService.class;
        }
    }
}

Затем у меня есть 2 отдельных файла классов для следующего:

@Singleton
public class UserTypeAService {
    public List<String> findAll(/*Parameters for A*/) {
        // Do work here for User Type A
    }
}
@Singleton
public class UserTypeBService {
    public List<String> findAll(/*Parameters for B*/) {
        // Do work here for User Type B
    }
}

Когда я пытаюсь достичь конечной точки, это ответ, который я получаю:

"com.test.services.UserTypeAService"

Есть предложения о том, как этого добиться?

1 Ответ

0 голосов
/ 08 октября 2019

добавить некоторый флаг для проверки того, какой пользователь вошел в систему с пользовательским субъектом. Затем вы можете ввести текущего пользователя и затем вызвать UserTypeAService.findAll или UserTypeBService.findAll в вашем методе.

@GET
@Path("/path/list")
public String yourMethod(@Context SecurityContext securityContext)
...