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 { @@ -267,7 +267,6 @@ class JsonValueWriter {
switch (ch) {
case '"' -> this.out.append("\\\"");
case '\\' -> this.out.append("\\\\");
case '/' -> this.out.append("\\/");
case '\b' -> this.out.append("\\b");
case '\f' -> this.out.append("\\f");
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 @@ @@ -16,7 +16,6 @@
package org.springframework.boot.json;
import java.io.File;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.LinkedHashMap;
@ -27,6 +26,9 @@ import java.util.NoSuchElementException; @@ -27,6 +26,9 @@ import java.util.NoSuchElementException;
import java.util.function.Consumer;
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;
@ -168,7 +170,6 @@ class JsonValueWriterTests { @@ -168,7 +170,6 @@ class JsonValueWriterTests {
void writeWhenStringRequiringEscape() {
assertThat(write("\"")).isEqualTo(quoted("\\\""));
assertThat(write("\\")).isEqualTo(quoted("\\\\"));
assertThat(write("/")).isEqualTo(quoted("\\/"));
assertThat(write("\b")).isEqualTo(quoted("\\b"));
assertThat(write("\f")).isEqualTo(quoted("\\f"));
assertThat(write("\n")).isEqualTo(quoted("\\n"));
@ -177,6 +178,11 @@ class JsonValueWriterTests { @@ -177,6 +178,11 @@ class JsonValueWriterTests {
assertThat(write("\u0000\u001F")).isEqualTo(quoted("\\u0000\\u001F"));
}
@Test
void shouldNotEscapeForwardSlash() {
assertThat(write("/")).isEqualTo(quoted("/"));
}
@Test
void writeObject() {
Map<String, String> map = Map.of("a", "A");
@ -249,9 +255,15 @@ class JsonValueWriterTests { @@ -249,9 +255,15 @@ class JsonValueWriterTests {
}
@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() {
assertThat(doWrite((valueWriter) -> valueWriter.write(Path.of("a/b/c"))))
.isEqualTo(quoted("a\\%1$sb\\%1$sc".formatted(File.separator)));
assertThat(doWrite((valueWriter) -> valueWriter.write(Path.of("a/b/c")))).isEqualTo(quoted("a/b/c"));
}
@Test

Loading…
Cancel
Save