Sto cercando di utilizzare i post Ajax su Spring @RestController
. Jackson ha problemi con le annotazioni @Json...Reference
all'interno dello @Entity
ereditato da quello pubblicato (@Inheritance(strategy = InheritanceType.JOINED)
).Come registrare correttamente un JsonSerializer personalizzato?
Ho visto molte domande e risposte a riguardo. A partire da ora, la modifica permanente dell'entità padre non è consentita. Ho accesso a, e posso cambiare temporaneamente, la mia copia locale, quindi sono stato in grado di confermare la rimozione delle annotazioni nel genitore potrebbe potenzialmente risolvere il problema, presumibilmente, al costo di rompere qualcos'altro. Quindi, la mia soluzione è implementare una custom JsonSerializer
.
Il problema è che non viene chiamato; Penso di averlo fatto correttamente da quello che ho visto. Ecco il codice relativo:
Registro il @Bean
nel mio file AppConfig
. Ho provato le varianti per il corpo del metodo; questo è solo il più recente che non funziona ...
@Bean
public Jackson2ObjectMapperBuilder jackson2ObjectMapperBuilder() {
SimpleModule m = new SimpleModule();
m.addSerializer(Orchard.class, new OrchardSerializer());
return new Jackson2ObjectMapperBuilder().modules(m);
}
Fornisco il serializzatore; il punto di rottura sotto non viene mai attivato ...
public class OrchardSerializer extends JsonSerializer<Orchard> {
@Override
public Class<Orchard> handledType() {
return Orchard.class;
}
@Override
public void serialize(Orchard orchard, JsonGenerator jsonGenerator, SerializerProvider serializerProvider)
throws JsonProcessingException {
System.out.println("Break on me...");
}
}
L'entità che sto cercando di inviare ...
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@JsonSerialize(using = OrchardSerializer.class)
public class Orchard extends Yard {
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private List<Person> contacts;
@Column(name = "COUNT")
private Integer count;
...getters/setters
}
Come faccio a registrare una consuetudine JsonSerializer
quindi sarà chiamato su un Ajax inviare?
Possibile, è necessario HttpMessageConverter personalizzato? –