diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/LinkedUserProfileResourceSerializer.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/LinkedUserProfileResourceSerializer.java index 582ad419b2abd5a160e3b5ceb124d84114c49d87..c5d25a7dc0be69c0684c522fe454e5b5307e14fa 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/LinkedUserProfileResourceSerializer.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/common/LinkedUserProfileResourceSerializer.java @@ -37,19 +37,28 @@ import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.SerializerProvider; import com.fasterxml.jackson.databind.ser.ContextualSerializer; +import de.ozgcloud.alfa.common.user.UserManagerProperties; import de.ozgcloud.alfa.common.user.UserManagerUrlProvider; import de.ozgcloud.common.errorhandling.TechnicalException; -import lombok.RequiredArgsConstructor; @Component -@RequiredArgsConstructor public class LinkedUserProfileResourceSerializer extends JsonSerializer<Object> implements ContextualSerializer { private final UserManagerUrlProvider userManagerUrlProvider; private LinkedUserProfileResource annotation; - static LinkedUserProfileResourceSerializer createForAnnotatedField(UserManagerUrlProvider userManagerUrlProvider, LinkedUserProfileResource annotation) { + // for usage outside of Spring + private LinkedUserProfileResourceSerializer() { + this.userManagerUrlProvider = new UserManagerUrlProvider(new UserManagerProperties()); + } + + public LinkedUserProfileResourceSerializer(UserManagerUrlProvider userManagerUrlProvider) { + this.userManagerUrlProvider = userManagerUrlProvider; + } + + static LinkedUserProfileResourceSerializer createForAnnotatedField(UserManagerUrlProvider userManagerUrlProvider, + LinkedUserProfileResource annotation) { var serializer = new LinkedUserProfileResourceSerializer(userManagerUrlProvider); serializer.annotation = annotation; return serializer; @@ -57,7 +66,8 @@ public class LinkedUserProfileResourceSerializer extends JsonSerializer<Object> @Override public JsonSerializer<?> createContextual(SerializerProvider prov, BeanProperty property) { - return LinkedUserProfileResourceSerializer.createForAnnotatedField(userManagerUrlProvider, property.getAnnotation(LinkedUserProfileResource.class)); + return LinkedUserProfileResourceSerializer.createForAnnotatedField(userManagerUrlProvider, + property.getAnnotation(LinkedUserProfileResource.class)); } @Override diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/LinkedUserProfileResourceSerializerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/LinkedUserProfileResourceSerializerTest.java index 31f1031218762d56ea641f5feb4e116555fe3420..683ce447629fb59769a81fd1c57744f04ce5f5a7 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/LinkedUserProfileResourceSerializerTest.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/common/LinkedUserProfileResourceSerializerTest.java @@ -14,10 +14,12 @@ import org.mockito.Captor; import org.mockito.Mock; import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializerProvider; import de.ozgcloud.alfa.common.user.UserId; import de.ozgcloud.alfa.common.user.UserManagerUrlProvider; +import de.ozgcloud.alfa.common.user.UserProfileTestFactory; import lombok.SneakyThrows; class LinkedUserProfileResourceSerializerTest { @@ -158,6 +160,20 @@ class LinkedUserProfileResourceSerializerTest { } } + @Nested + class OnCreatedImplicitlyByObjectMapper { + + @SneakyThrows + @Test + void shouldSerializeToString() { + var objectMapper = new ObjectMapper(); + + var serialized = objectMapper.writeValueAsString(new LinkedUserProfileResourceTestObject(UserProfileTestFactory.ID)); + + assertThat(serialized).isEqualTo("{\"id\":\"" + UserProfileTestFactory.ID.toString() + "\"}"); + } + } + @SneakyThrows private void serializeSingleValue() { serializer.serialize(USER_ID, generator, serializerProvider);