diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/json/JsonValueWriter.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/json/JsonValueWriter.java index 7e924ce234..feb92be2b8 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/json/JsonValueWriter.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/json/JsonValueWriter.java @@ -18,6 +18,7 @@ package org.springframework.boot.json; import java.io.IOException; import java.io.UncheckedIOException; +import java.nio.file.Path; import java.util.ArrayDeque; import java.util.Arrays; import java.util.Deque; @@ -114,6 +115,9 @@ class JsonValueWriter { throw new UncheckedIOException(ex); } } + else if (value instanceof Path p) { + writeString(p.toString()); + } else if (value instanceof Iterable iterable) { writeArray(iterable::forEach); } diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/json/JsonValueWriterTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/json/JsonValueWriterTests.java index 94939db8da..f2966b3e7a 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/json/JsonValueWriterTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/json/JsonValueWriterTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2024 the original author or authors. + * Copyright 2012-2025 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. @@ -16,6 +16,7 @@ package org.springframework.boot.json; +import java.nio.file.Path; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; @@ -240,6 +241,16 @@ class JsonValueWriterTests { .isThrownBy(() -> valueWriter.end(Series.ARRAY))); } + @Test // gh-44502 + void writeJavaNioPathWhenSingleElementShouldBeSerializedAsString() { + assertThat(doWrite((valueWriter) -> valueWriter.write(Path.of("a")))).isEqualTo(quoted("a")); + } + + @Test // gh-44502 + void writeJavaNioPathShouldBeSerializedAsString() { + assertThat(doWrite((valueWriter) -> valueWriter.write(Path.of("a/b/c")))).isEqualTo(quoted("a\\/b\\/c")); + } + private String write(V value) { return doWrite((valueWriter) -> valueWriter.write(value)); }