From f77d23de947941da588fd9619bcdefdb5dd137cc Mon Sep 17 00:00:00 2001 From: KateVasovski Date: Mon, 14 Oct 2019 12:31:16 +0300 Subject: [PATCH 1/2] @MessgeMapping support for Optional --- .../support/PrincipalMethodArgumentResolver.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/spring-messaging/src/main/java/org/springframework/messaging/simp/annotation/support/PrincipalMethodArgumentResolver.java b/spring-messaging/src/main/java/org/springframework/messaging/simp/annotation/support/PrincipalMethodArgumentResolver.java index 4c7d9824ad..859eaef433 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/simp/annotation/support/PrincipalMethodArgumentResolver.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/simp/annotation/support/PrincipalMethodArgumentResolver.java @@ -17,6 +17,7 @@ package org.springframework.messaging.simp.annotation.support; import java.security.Principal; +import java.util.Optional; import org.springframework.core.MethodParameter; import org.springframework.messaging.Message; @@ -24,7 +25,7 @@ import org.springframework.messaging.handler.invocation.HandlerMethodArgumentRes import org.springframework.messaging.simp.SimpMessageHeaderAccessor; /** - * {@link HandlerMethodArgumentResolver} to a {@link Principal}. + * {@link HandlerMethodArgumentResolver} to a {@link Principal} or {@link Optional} of {@link Principal}. * * @author Rossen Stoyanchev * @since 4.0 @@ -33,17 +34,19 @@ public class PrincipalMethodArgumentResolver implements HandlerMethodArgumentRes @Override public boolean supportsParameter(MethodParameter parameter) { - Class paramType = parameter.getParameterType(); + MethodParameter nestedParameter = parameter.nestedIfOptional(); + Class paramType = nestedParameter.getNestedParameterType(); return Principal.class.isAssignableFrom(paramType); } @Override - public Object resolveArgument(MethodParameter parameter, Message message) throws Exception { + public Object resolveArgument(MethodParameter parameter, Message message){ Principal user = SimpMessageHeaderAccessor.getUser(message.getHeaders()); - if (user == null) { - throw new MissingSessionUserException(message); + if (parameter.isOptional()) { + return Optional.ofNullable(user); + } else { + return user; } - return user; } } From 739d2881faf7d98bfbf09cab3a5fae0f2e87497d Mon Sep 17 00:00:00 2001 From: Rossen Stoyanchev Date: Wed, 23 Oct 2019 14:55:55 +0100 Subject: [PATCH 2/2] Polishing --- .../support/PrincipalMethodArgumentResolver.java | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/spring-messaging/src/main/java/org/springframework/messaging/simp/annotation/support/PrincipalMethodArgumentResolver.java b/spring-messaging/src/main/java/org/springframework/messaging/simp/annotation/support/PrincipalMethodArgumentResolver.java index 859eaef433..6b9a013386 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/simp/annotation/support/PrincipalMethodArgumentResolver.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/simp/annotation/support/PrincipalMethodArgumentResolver.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2018 the original author or authors. + * Copyright 2002-2019 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -25,7 +25,7 @@ import org.springframework.messaging.handler.invocation.HandlerMethodArgumentRes import org.springframework.messaging.simp.SimpMessageHeaderAccessor; /** - * {@link HandlerMethodArgumentResolver} to a {@link Principal} or {@link Optional} of {@link Principal}. + * Resolver for arguments of type {@link Principal}, including {@code Optional}. * * @author Rossen Stoyanchev * @since 4.0 @@ -42,11 +42,7 @@ public class PrincipalMethodArgumentResolver implements HandlerMethodArgumentRes @Override public Object resolveArgument(MethodParameter parameter, Message message){ Principal user = SimpMessageHeaderAccessor.getUser(message.getHeaders()); - if (parameter.isOptional()) { - return Optional.ofNullable(user); - } else { - return user; - } + return parameter.isOptional() ? Optional.ofNullable(user) : user; } }