Il mio personale di vista, se la risposta contiene DTO (Bean/Raccolta di fagioli), quindi il servizio di riposo deve sempre restituire DTO, ma non oggetto di risposta.
La motivazione: presto o tardi, vi verrà chiesto di fare un uso del servizio di riposo facile per i clienti, fornendo resto client API. Di solito, devi estrapolare le interfacce per il resto e implementarle con i tuoi servizi di riposo . Queste interfacce di resto sono utilizzate dai client del tuo rest client.
E dal punto di vista del cliente c'è un'enorme differenza tra l'elaborazione di DTO e la risposta semplice. In caso di risposta viene utilizzato, il vostro cliente è costretto:
- controllare codice di risposta esplicitamente al processo di risposta di successo
- errori maniglia, per il codice di verifica esplicitamente
- corpo Converti della vostra risposta in DTO da lui stesso.
Il che significa che la gestione della risposta è molto simile ai codici di errore restituiti nei metodi, che è considerata una pratica molto negativa. Per gestire gli errori in un unico punto, vengono utilizzate eccezioni (non sto parlando di modi FP di gestire gli errori, che è il migliore).
Così che cosa può fare:
- Nel caso in cui una richiesta viene elaborata con successo, di convertire i dati di servizio resto in DTO/Bean e restituirlo.
- Nel caso in cui la convalida non sia andata a buon fine o qualcosa sia andato storto, genera un'eccezione nel servizio di assistenza. Forse un mappatore di eccezioni predefinito non è adatto a te, quindi dovrai implementare il tuo mappatore di eccezioni.
Quindi, se si pensa in anticipo, è necessario restituire DTO.
Un caso d'uso, quando è necessario restituire una risposta semplice, ad es. Quando si esporta un file. Sembra che JAX RS non permetta di restituire l'oggetto InputStream. Non sono sicuro, deve essere controllato.
L'altro caso d'uso, è stato ricordato da @Perception, ma è più un'eccezione, di una regola:
I metodi che devono fornire metadati aggiuntivi con una risposta dovrebbe restituire un'istanza di risposta, la classe ResponseBuilder fornisce un modo conveniente per creare un'istanza di risposta utilizzando un modello di build .
Nota: si tratta di una questione generale per JAX RS, non dipende dalla realizzazione precisa, come Resteasy o Jersey
Essi sono identici, se si considera che non ritorni un po 'di classe 'Exception' come hai detto. 'Response' fornisce l'opzione per restituire qualsiasi tipo di oggetto, e anche impostare un' HttpStatus'. In questo caso, risulterà '200 OK'. Ma non puoi passare a un altro stato come preferisci usando 'Risposta'. È la mia opinione, ovviamente, ma mi piace il modo di "Risposta". –
Significa che è possibile passare a uno stato di risposta diverso utilizzando l'oggetto Risposta? Se si restituisce la Lista, lo stato della risposta è anche 200 OK. –
Sì, puoi cambiare se vuoi. Di default 'Response.ok(). Entity (entity) .build();' restituirà '200 OK' se l'entità non è nulla, altrimenti restituirà' 204 NO CONTENT'. È possibile forzare la restituzione di uno stato '200 OK' con' Response.ok(). Entity (entity) .status (Status.OK) .build(); 'anche l'entità è null; –