Скажем, у меня есть этот клиентский вход JSON:
{
id: "5",
types: [
{id: "1", types:[]},
{id: "2", types:[]},
{id: "1", types[]}
]
}
У меня есть этот класс:
class Entity {
private String id;
private Set<Entity> types = new LinkedHashSet<>();
public String getId() {
return this.id;
}
public String setId(String id) {
this.id = id;
}
public Set<Entity> getTypes() {
return types;
}
@JsonDeserialize(as=LinkedHashSet.class)
public void setTypes(Set<Entity> types) {
this.types = types;
}
@Override
public boolean equals(Object o){
if (o == null || !(o instanceof Entity)){
return false;
}
return this.getId().equals(((Entity)o).getId());
}
}
У меня есть эта конечная точка Java Spring, где я передаю вход в тело POST запрос:
@RequestMapping(value = "api/entity", method = RequestMethod.POST)
public Entity createEntity(@RequestBody final Entity in) {
Set<Entity> types = in.getTypes();
[...]
}
Я хотел бы:
Set<Entity> types = in.getTypes();
иметь только две записи в правильном порядке... так как один из них является дубликатом на основе идентификатора... Вместо этого я получаю дубликаты в LinkedHashSet (!)
Я думал, что из кода, который у меня есть, удаление дубликатов будет работать автоматически, но, видимо, это не так.
Этот вопрос имеет более широкий контекст, чем Почему мне нужно переопределить методы equals и hashCode в Java? поскольку он использует неявную сериализацию Джексона через Java Spring.