Получение параметра JSON содержит ошибку $ {} в Spring Boot - PullRequest
4 голосов
/ 05 августа 2020

Когда JSON я получил запрос, содержащий $ {}, $ {} удаляется из полученного объекта.

запрошено JSON

{
  "name":"$123$",
  "str1":"${str1}",
  "str2":"${str222",
  "str3":"${str3}333",
  "str4":"${str4}44444"
}

Контроллер

@RestController
public class TestController {
    @PostMapping("std")
    public Std test$2(@RequestBody Std std) {
        return std;
    }
}

Стандартный java

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Std {
    private String name;
    private String str1;
    private String str2;
    private String str3;
    private String str4;
    private String aa;
}

Результат

{
"name": "$123$",
"str1": "str1",
"str2": "${str222",
"str3": "str3333",
"str4": "str444444"
}

Когда я вручную разбираю JSON через код, результат правильный. Вывод JSON содержит $ {}. вот так

    public void test() {
        try {
            String str = "{\n" +
                    "  \"name\":\"$123$\",\n" +
                    "  \"str1\":\"${str1}\",\n" +
                    "  \"str2\":\"${str2}22\",\n" +
                    "  \"str3\":\"${str3}333\",\n" +
                    "  \"str4\":\"${str4}44444\"\n" +
                    "}";
            Std std = JSON.parseObject(str, Std.class);
            System.out.println(JSON.toJSONString(std));
            Std std1 = objectMapper.readValue(str, Std.class);
            System.out.println(objectMapper.writeValueAsString(std1));
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
    }

Любая помощь будет принята с благодарностью!

1 Ответ

1 голос
/ 05 августа 2020

Обозначение ${variableName} используется в Spring Boot с целью импорта значений переменных конфигурации или переменных среды. Это root причина проблемы, показанной выше.

Проблема может быть решена двумя способами -

  1. Замените $ {и } с другим символом снятия ограничений

    Пример: используйте #data# вместо ${data}

    Этот подход легко реализовать, поскольку это можно сделать с небольшим изменением кода.

  2. Добавьте явную escape-последовательность для закрывающей скобки IE для символа } во входных данных JSON.

    Этот подход сложно реализовать, поскольку это может потребовать больше изменений кода, чем другой подход.

...