Как обработать внутреннюю ошибку 500 при отображении JSON в POJO, если один из атрибутов класса POJO пуст - PullRequest
1 голос
/ 17 февраля 2020

Привет, я работаю над Rest API, написанным на java, и у меня возникли следующие сомнения.

Я уже написал код, который принимает данные постов и сопоставляет их с классом pojo и отправляет обратно данные в JSON форма.

Правильный формат: -

{
    "Name":"Rahul",
    "Address":"Mumbai",
    "Age": 27
}

Вывод:

{
    "Pkid":"1",
    "Name":"Rahul",
    "Address":"Mumbai",
    "Age": 27
}

Но когда я передаю пустое значение одному из атрибутов, я получаю Внутренняя ошибка 500, может кто-нибудь помочь мне, как ее обработать и вернуть значение в формате json после обработки:

{
    "Name":,
    "Address":"Mumbai",
    "Age": 27
}

Вывод:

500 Internal error

Ответы [ 3 ]

0 голосов
/ 17 февраля 2020

Прежде всего, используйте валидатор json. кажется, что у вас пропущена запятая.

https://jsonformatter.curiousconcept.com/

А также полезно поделиться соответствующим кодом и извлечь исключение et c.

0 голосов
/ 17 февраля 2020

Понимание: вы пытаетесь сохранить объект и вернуть сведения об объекте вместе с сгенерированным идентификатором первичного ключа. Ниже приведены два подхода к этому:

1. Пользовательский десериализатор с Джексоном : я бы предпочел этот метод, потому что он обеспечивает дополнительную безопасность. В текущем сценарии вы подвержены атакам межсайтового скриптинга. Использование специального десериализатора вместе с Jsoup api или Антисамирование для фильтрации данных поможет вам предотвратить XSS, а также включает нулевые значения.

Вам необходимо добавить свой собственный десериализатор в ваш pojo, используя:

    @JsonDeserialize(using = CustomDeserializer.class)
    public class User {
       private String id;

       private String name;
      // standard getters and setters
    }

2. Использование аннотации Джексона:

public class User {

    @JsonInclude(Include.NON_NULL)
    private String id;

    private String name;

    // standard getters and setters
}
0 голосов
/ 17 февраля 2020

Вы можете использовать библиотеку Джексона и установить свойство ниже при создании объекта.

val mapper = new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

Добавьте приведенную ниже зависимость maven:

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.9.7</version>
        </dependency>

Здесь вы можете увидеть ответ также.

РЕДАКТИРОВАТЬ 1: Десериализовать ваш jsonObject как:

objectMapper.readValue(jsonString,POJO.class)
...