Джексон с JSON: нераспознанное поле, не помеченное как игнорируемое

Мы решили это следующим образом:

  1. Использовать memcache на сервере с открытым подключением с другого сервера паролей.
  2. Сохранить в memcache пароль (или даже все файл password.php зашифрован), а также ключ дешифрования.
  3. Веб-сайт вызывает ключ memcache, содержащий парольную фразу пароля и дешифрует в памяти все пароли.
  4. Сервер паролей отправьте новый зашифрованный файл паролей каждые 5 минут.
  5. Если вы используете зашифрованный пароль.php в своем проекте, вы отправляете аудит, который проверяет, был ли этот файл затронут извне - или просмотрен. Когда это произойдет, вы автоматически можете очистить память, а также закрыть сервер для доступа.
565
задан JJD 16 August 2017 в 07:22
поделиться

8 ответов

Это отлично сработало для меня

objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
4
ответ дан Niamath 16 August 2017 в 07:22
поделиться

Ваша строка json не соответствует встроенному классу. Измените строку ввода

String jsonStr = "{\"students\"\:[{\"id\":\"13\",\"name\":\"Fred\"}]}";

Или измените свой сопоставленный класс

public class Wrapper {
    private List<Student> wrapper;
    //getters & setters here
}
0
ответ дан Richard 16 August 2017 в 07:22
поделиться

Google привел меня сюда, и я был удивлен, увидев ответы ... все предложили обойти ошибку (, которая всегда отклоняется на 4 раза позже в процессе разработки ), а не решить ее пока этот джентльмен не восстановлен верой в SO!

objectMapper.readValue(responseBody, TargetClass.class)

используется для преобразования строки json в объект класса, чего не хватает, так это тому, что TargetClass должен иметь public get тер / set терс. То же самое отсутствует в фрагменте вопроса ОП тоже! :)

через ломбок ваш класс, как показано ниже, должен работать !!

@Data
@Builder
public class TargetClass {
    private String a;
}
1
ответ дан NoobEditor 16 August 2017 в 07:22
поделиться

Первый ответ почти правильный, но необходимо изменить метод получения, а НЕ поле - поле является закрытым (и не определяется автоматически); кроме того, геттеры имеют приоритет над полями, если оба видны. (Есть также способы сделать приватные поля видимыми, но если вы хотите получить геттер, нет особого смысла)

Так что геттер должен быть либо назван getWrapper() или помечены:

@JsonProperty("wrapper")

Если вы предпочитаете имя метода получения как есть.

118
ответ дан Nomade 16 August 2017 в 07:22
поделиться

То, когда мы генерируем методы считывания и методы set, особенно который запускается с, 'является' ключевым словом, IDE обычно удаляет. например,

private boolean isActive;

public void setActive(boolean active) {
   isActive = active;
}

public isActive(){
   return isActive;
}

В моем случае, я просто изменил метод считывания и метод set.

private boolean isActive;

public void setIsActive(boolean active) {
   isActive = active;
}

public getIsActive(){
   return isActive;
}

И это смогло распознать поле.

0
ответ дан 22 November 2019 в 22:00
поделиться

В моем случае я должны добавить общедоступные методы считывания и методы set для отъезда полей частными.

ObjectMapper mapper = new ObjectMapper();
Application application = mapper.readValue(input, Application.class);

я использую jackson-привязку-данных 2.10.0.pr3.

0
ответ дан 22 November 2019 в 22:00
поделиться

импорт com.fasterxml.jackson.annotation. JsonIgnoreProperties;

@JsonIgnoreProperties

0
ответ дан 22 November 2019 в 22:00
поделиться

опция FAIL_ON_UNKNOWN_PROPERTIES верна по умолчанию:

FAIL_ON_UNKNOWN_PROPERTIES (default: true)
Used to control whether encountering of unknown properties (one for which there is no setter; and there is no fallback "any setter" method defined using @JsonAnySetter annotation) should result in a JsonMappingException (when enabled), or just quietly ignored (when disabled)
0
ответ дан 22 November 2019 в 22:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: