Проверить строку JSON с помощью REGEX в JSONAssert java

Я сохраняю ожидаемую строку json в файле json в ресурсах, как показано ниже. Строка json состоит из регулярного выражения. Я использую JSONAssert Library для сравнения двух строк json.

{
  "timestamp": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}+\\d{4}$",
  "status": 415,
  "error": "Unsupported Media Type",
  "message": "Content type 'text/plain;charset=ISO-8859-1' not supported",
  "path": "/service/addUser"
}

Мой фактический ответ состоит из отметки времени в этом формате 2018-11-13T04:10:11.233+0000

    JSONAssert.assertEquals(getJsonBody(expected), response.asString(),false);

Всегда выдает ошибку ниже в регулярном выражении

java.lang.AssertionError: timestamp
 Expected: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{3}+\d{4}$
      got: 2018-11-13T04:12:55.923+0000

Любые рекомендации по этой ошибке?

вместо сравнения значений вы должны сделать что-то вроде assertTrue(response.asString().matches(expected))

Kartik 13.11.2018 05:19

Ваше регулярное выражение неверно - точка и плюс имеют особое значение и должны быть экранированы. Попробуйте ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}\+\d{4}$

D.B. 13.11.2018 05:23

Я сбежал, но это не работает. Та же ошибка

vkrams 13.11.2018 05:42

Я добавил это регулярное выражение [0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}\\.[0-9‌​]{3}\\+[0-9]{4}, но не сработало

vkrams 13.11.2018 05:53

@Kartik У меня есть исключение для сопоставления шаблонов. Позволь мне исправить это

vkrams 13.11.2018 05:57

@vkrams ах, извините, я неправильно понял ваш вопрос, позвольте мне обновить свой ответ

Kartik 13.11.2018 06:05

@kartik, твой ответ работает. Спасибо :-)

vkrams 13.11.2018 06:14
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
7
1 239
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы сравниваете шаблон со строкой отметки времени. Что вам на самом деле нужно сделать, так это проверить, соответствует ли временная метка Спички шаблону.

Попробуйте этот код: -

String expected = "{\n" +
        "  \"timestamp\": \"^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}\\\\.\\\\d{3}\\\\+\\\\d{4}$\",\n" +
        "  \"status\": 415,\n" +
        "  \"error\": \"Unsupported Media Type\",\n" +
        "  \"message\": \"Content type 'text/plain;charset=ISO-8859-1' not supported\",\n" +
        "  \"path\": \"/service/addUser\"\n" +
        "}";
String actual = "{\n" +
        "  \"timestamp\": \"2018-11-13T04:12:55.923+0000\",\n" +
        "  \"status\": 415,\n" +
        "  \"error\": \"Unsupported Media Type\",\n" +
        "  \"message\": \"Content type 'text/plain;charset=ISO-8859-1' not supported\",\n" +
        "  \"path\": \"/service/addUser\"\n" +
        "}";
JSONAssert.assertEquals(
        expected,
        actual,
        new CustomComparator(
                JSONCompareMode.LENIENT,
                new Customization("***", new RegularExpressionValueMatcher<>())
        )
);

Итак, с вашим кодом это будет выглядеть примерно так: -

JSONAssert.assertEquals(
        getJsonBody(expected),
        response.asString(),
        new CustomComparator(
                JSONCompareMode.LENIENT,
                new Customization("***", new RegularExpressionValueMatcher<>())
        )
);

Другие вопросы по теме