diff --git a/gradle/changelog/embedded_deserialization.yaml b/gradle/changelog/embedded_deserialization.yaml new file mode 100644 index 0000000000..ce6bb2d39d --- /dev/null +++ b/gradle/changelog/embedded_deserialization.yaml @@ -0,0 +1,3 @@ +- type: fixed + description: Deserialization of embedded values in HAL objects ([#1630](https://github.com/scm-manager/scm-manager/pull/1630)) + diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/ObjectMapperProvider.java b/scm-webapp/src/main/java/sonia/scm/api/rest/ObjectMapperProvider.java index 060cf50fde..f911f51c7b 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/ObjectMapperProvider.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/ObjectMapperProvider.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.api.rest; import com.fasterxml.jackson.databind.AnnotationIntrospector; @@ -50,6 +50,7 @@ public class ObjectMapperProvider implements Provider { mapper.setAnnotationIntrospector(createAnnotationIntrospector()); mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); + mapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true); mapper.configure(SerializationFeature.WRITE_DATES_WITH_ZONE_ID, true); mapper.setDateFormat(new StdDateFormat()); return mapper; diff --git a/scm-webapp/src/test/java/sonia/scm/api/rest/ObjectMapperProviderTest.java b/scm-webapp/src/test/java/sonia/scm/api/rest/ObjectMapperProviderTest.java index 51ef7d3e1d..6aa982de99 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/rest/ObjectMapperProviderTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/rest/ObjectMapperProviderTest.java @@ -21,10 +21,11 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.api.rest; import com.fasterxml.jackson.core.JsonProcessingException; +import de.otto.edison.hal.HalRepresentation; import org.junit.jupiter.api.Test; import java.time.ZoneId; @@ -45,4 +46,10 @@ class ObjectMapperProviderTest { assertThat(value).isEqualTo("\"2020-02-04T14:21:42Z\""); } + @Test + void shouldDeserializeEmbeddedObjects() throws JsonProcessingException { + HalRepresentation halRepresentation = provider.get().readValue("{\"_embedded\": {\"avatar\": {\"type\": \"AUTO_GENERATED\"}}}", HalRepresentation.class); + + assertThat(halRepresentation.getEmbedded().getItemsBy("avatar")).hasSize(1); + } }