Итак, у меня есть объект запроса 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?