È davvero bello avere un binding automatico con Jersey-Jackson (beh, credo che sia in realtà MOXy colui che gestisce i binding), quindi la serializzazione degli oggetti e la deserializzazione sono fatti sotto il cofano.
Esempi di entrambi quelli che uso nel mio servizio RESTful:
@POST
@Consumes(MediaType.APPLICATION_JSON)
public String createTournament(Tournament tournament) {
return tournamentDao.create(tournament);
}
@Path("/{id}")
@GET
@Produces(MediaType.APPLICATION_JSON)
public Tournament getTournament(@PathParam("id") String id) {
Optional<Tournament> optTournament = tournamentDao.getTournament(id);
if (optTournament.isPresent())
return optTournament.get();
throw new NotFoundException();
}
Ma cosa succede se la serializzazione o la deserializzazione falliscono in qualche momento durante il processo? Ad esempio, campi sconosciuti, tipi errati, formato JSON illegale, ecc ... Beh, non posso occuparmene perché la serializzazione / deserializzazione sta accadendo dietro le quinte e tutto quello che so è che otterrò un argomento di tipo Tournament
(o restituirlo nell'altro caso) ma questo presuppone che il processo abbia successo.
Come posso affrontare questo? Cosa accadrebbe se volessi restituire un altro tipo di risposta per un JSON di torneo mal formattato invece di generare un'eccezione durante un punto molto particolare della serializzazione / deserializzazione?
È possibile? Inoltre, qual è l'approccio standard per questi scenari? Quale risposta sarebbe appropriata per un errore durante l'elaborazione JSON?