HandlerMethodArgumentResolver для установки логического значения в объекте param запроса - PullRequest
0 голосов
/ 24 сентября 2019

Итак, у меня есть объект запроса param, который имеет логическое значение.Пользователь не может заполнить значение, но основываясь на других значениях в запросе, я должен выяснить значение для этого логического значения.

RequestParam

@AllArgsConstructor
@Data
@NoArgsConstructor
public class User {
    private String userId;
    private Boolean isAuthorized;
}

Я использую HandleMethodArgumentResolver, чтобы выяснить,значение для "isAuthorized" в объекте User.

public class UserAuthorizationResolver implements HandlerMethodArgumentResolver {

    private final AuthorizeUser authorizeUser;

    public ContentCatalogingPartnersResolver(final AuthorizeUser authorizeUser) {
        this.authorizeUser = authorizeUser;
    }

    @Override
    public boolean supportsParameter(final MethodParameter parameter) {
        return false;
        // OR should this be something like 
        // return parameter.hasParameterAnnotation(AuthorizeUser.class); 
        // and add an annotation in my controller? 
    }

    @Override
    public Object resolveArgument(final MethodParameter parameter,
                                  final ModelAndViewContainer mavContainer,
                                  final NativeWebRequest webRequest,
                                  final WebDataBinderFactory binderFactory) {
        final String userId = webRequest.getParameter("userId");

        final boolean authorized = Optional.ofNullable(userId)
                                             .map(authorizeUser::isUserAuthorized)
                                             .orElse(false);

        return authorized;
    }
}

Как установить значение из этого класса Resolver в поле "isAuthorized" в классе User?

Я также застрял на том, как внедрить этот класс распознавателя в мой класс WebMvcConfigurer, потому что этот преобразователь принимает службу "AuthorizeUser" в качестве параметра в конструкторе, но я не могу передать это из своего класса конфигурации.

Если я не могу внедрить другой класс обслуживания в конструктор этого класса распознавателя, то существует ли другой способ, которым этот класс распознавателя может установить это логическое значение в объекте User?

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