Я понимаю из вопроса, что вам могут понадобиться два случая:
- Отправить свойство в JSON, у которого нет соответствующего поля в объекте
User
.В этом случае вам все еще нужно использовать объект User
с предоставленными полями и игнорировать остальное, которое было предоставлено в JSON - Отправить дополнительные свойства в JSON, и вам все равно нужно захватить их в
User
объект без , определяющий эти дополнительные свойства конкретно в объекте.
Я думаю, что в обоих случаях лучше использовать Джексона, чем Гсона, поскольку он обладает более богатым управлением маршалингом над объектами.Таким образом, мое решение ниже предполагает, что вы будете использовать Джексона с сетью Spring - maven-зависимость для Джексона выглядит следующим образом:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
Первый случай
В этом случаеДжексон должен игнорировать свойство metaInfoId
, когда оно десериализует JSON в объект User
.Для этого добавьте эту аннотацию в начало вашего User
класса.
@JsonIgnoreProperties(ignoreUnknown = true)
class User {
private String firstName;
private String lastName;
// the rest of the class definition
}
Второй случай
Во втором случае вам все еще нужнозахватить дополнительные свойства.Я бы предложил добавить catch all HashMap
, который принимает дополнительные неопределенные свойства, и вы можете получить к нему доступ по ключу / значению.Чтобы достичь этого, вам нужно добавить следующее к вашему User
классу, или лучше создать абстрактный класс, который имеет этот код, где User
расширяет его.
class User {
private String firstName;
private String lastName;
private Map<String, Object> extra;
@JsonAnySetter
public void addExtra(final String key, final Object value){
this.extra.put(key, value);
}
@JsonAnyGetter
public Map<String, Object> getExtra() {
return Collections.unmodifiableMap(this.extra);
}
// the rest of the class definition
}
Надеюсь, это поможет