Browse Source

Stop escaping forward slash when writing JSON

Closes gh-45972
pull/45853/head
Moritz Halbritter 6 months ago
parent
commit
7178458116
  1. 1
      spring-boot-project/spring-boot/src/main/java/org/springframework/boot/json/JsonValueWriter.java
  2. 20
      spring-boot-project/spring-boot/src/test/java/org/springframework/boot/json/JsonValueWriterTests.java

1
spring-boot-project/spring-boot/src/main/java/org/springframework/boot/json/JsonValueWriter.java

@ -267,7 +267,6 @@ class JsonValueWriter {
switch (ch) { switch (ch) {
case '"' -> this.out.append("\\\""); case '"' -> this.out.append("\\\"");
case '\\' -> this.out.append("\\\\"); case '\\' -> this.out.append("\\\\");
case '/' -> this.out.append("\\/");
case '\b' -> this.out.append("\\b"); case '\b' -> this.out.append("\\b");
case '\f' -> this.out.append("\\f"); case '\f' -> this.out.append("\\f");
case '\n' -> this.out.append("\\n"); case '\n' -> this.out.append("\\n");

20
spring-boot-project/spring-boot/src/test/java/org/springframework/boot/json/JsonValueWriterTests.java

@ -16,7 +16,6 @@
package org.springframework.boot.json; package org.springframework.boot.json;
import java.io.File;
import java.nio.file.Path; import java.nio.file.Path;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
@ -27,6 +26,9 @@ import java.util.NoSuchElementException;
import java.util.function.Consumer; import java.util.function.Consumer;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.condition.DisabledOnOs;
import org.junit.jupiter.api.condition.EnabledOnOs;
import org.junit.jupiter.api.condition.OS;
import org.springframework.boot.json.JsonValueWriter.Series; import org.springframework.boot.json.JsonValueWriter.Series;
@ -168,7 +170,6 @@ class JsonValueWriterTests {
void writeWhenStringRequiringEscape() { void writeWhenStringRequiringEscape() {
assertThat(write("\"")).isEqualTo(quoted("\\\"")); assertThat(write("\"")).isEqualTo(quoted("\\\""));
assertThat(write("\\")).isEqualTo(quoted("\\\\")); assertThat(write("\\")).isEqualTo(quoted("\\\\"));
assertThat(write("/")).isEqualTo(quoted("\\/"));
assertThat(write("\b")).isEqualTo(quoted("\\b")); assertThat(write("\b")).isEqualTo(quoted("\\b"));
assertThat(write("\f")).isEqualTo(quoted("\\f")); assertThat(write("\f")).isEqualTo(quoted("\\f"));
assertThat(write("\n")).isEqualTo(quoted("\\n")); assertThat(write("\n")).isEqualTo(quoted("\\n"));
@ -177,6 +178,11 @@ class JsonValueWriterTests {
assertThat(write("\u0000\u001F")).isEqualTo(quoted("\\u0000\\u001F")); assertThat(write("\u0000\u001F")).isEqualTo(quoted("\\u0000\\u001F"));
} }
@Test
void shouldNotEscapeForwardSlash() {
assertThat(write("/")).isEqualTo(quoted("/"));
}
@Test @Test
void writeObject() { void writeObject() {
Map<String, String> map = Map.of("a", "A"); Map<String, String> map = Map.of("a", "A");
@ -249,9 +255,15 @@ class JsonValueWriterTests {
} }
@Test // gh-44502 @Test // gh-44502
@EnabledOnOs(OS.WINDOWS)
void writeJavaNioPathShouldBeSerializedAsStringOnWindows() {
assertThat(doWrite((valueWriter) -> valueWriter.write(Path.of("a/b/c")))).isEqualTo(quoted("a\\\\b\\\\c"));
}
@Test // gh-44502
@DisabledOnOs(OS.WINDOWS)
void writeJavaNioPathShouldBeSerializedAsString() { void writeJavaNioPathShouldBeSerializedAsString() {
assertThat(doWrite((valueWriter) -> valueWriter.write(Path.of("a/b/c")))) assertThat(doWrite((valueWriter) -> valueWriter.write(Path.of("a/b/c")))).isEqualTo(quoted("a/b/c"));
.isEqualTo(quoted("a\\%1$sb\\%1$sc".formatted(File.separator)));
} }
@Test @Test

Loading…
Cancel
Save