Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 13 su 13
  1. #11
    ho visto che @Produces accetta anche diversi media type.
    quello che però non ho capito, è come prendere il media type richiesto dal client:
    codice:
    @Path("test")
    public class TestService {
    
        @GET
        @Path("")
        @Produces({MediaType.APPLICATION_JSON, "application/vnd.ms-excel"})
        public Response test() {
            Response.ResponseBuilder response = Response.ok();
            return response.build();
        }
    
    }
    così gli dico che può "produrre" sia json che un excel da scaricare.
    ovviamente, nel primo caso mando in output il risultato della query.
    nel secondo, mi devo prima preoccupare di creare il file, e poi farglielo scaricare.
    è qui che mi perdo.
    mi viene in mente solo di fare switch o if/else, ma non mi sembra una cosa buona.

  2. #12
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da fermat Visualizza il messaggio
    ho visto che @Produces accetta anche diversi media type.
    Sì. Però la scelta di cosa poi fornire effettivamente generalmente/tipicamente è fatta dalla implementazione di JAX-RS e non è "banale" perché si basa sul Accept che può essere anche abbastanza complesso del tipo:

    Accept: application/json;q=0.5, application/vnd.ms-excel;q=0.8

    che vuol dire: mi piace di più il excel ma se non è disponibile mi va bene anche il JSON.
    q è il quality factor, da 0 (non desiderabile) a 1 (molto desiderabile)

    E in tutta questa scelta entrano in gioco anche gli entity provider di JAX-RS, MessageBodyReader e MessageBodyWriter.

    Un esempio classico è semplice: hai un metodo con @Produces che indica sia JSON che XML. Il metodo ritorna un "bean" del tuo dominio es. Libro. Immagina che ci siano due MessageBodyWriter configurati in grado di gestire sia JSON che XML. Tu restituisci sempre un oggetto Libro, è poi la implementazione di JAX-RS che sceglie quale formato generare e inviare in base a: 1) il Accept fornito dal client, 2) i MessageBodyWriter disponibili. In pratica tu non devi scegliere proprio nulla.


    Quote Originariamente inviata da fermat Visualizza il messaggio
    quello che però non ho capito, è come prendere il media type richiesto dal client:
    Il contenuto del Accept dal client lo puoi ottenere ma ripeto, dipende da chi è il client e cosa passa, se 1 solo content-type o più e con quality factor diversi, che rende la mediazione ovviamente non banale.

    Il tuo caso è sicuramente diverso da quello che ho descritto prima del Libro. JSON e XML permettono rappresentazioni concettualmente molto simili. Ma JSON ed un Excel sono due cose radicalmente differenti.

    Forse .... fai prima ad avere 2 metodi distinti. Se ti sembra noioso ... dipende: se devi farlo per pochi scenari, non credo sia un grosso problema. Se invece ne hai tanti, puoi anche mettere in gioco un po' di ereditarietà e realizzare un design in cui una classe base ha le annotazioni JAX-RS sui metodi e nelle sottoclassi hai le implementazioni che fanno il lavoro. (JAX-RS prevede che un metodo "erediti" le annotation JAX-RS da un metodo nella super-classe).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #13
    Quote Originariamente inviata da andbin Visualizza il messaggio

    Forse .... fai prima ad avere 2 metodi distinti. Se ti sembra noioso ... dipende: se devi farlo per pochi scenari, non credo sia un grosso problema. Se invece ne hai tanti, puoi anche mettere in gioco un po' di ereditarietà e realizzare un design in cui una classe base ha le annotazioni JAX-RS sui metodi e nelle sottoclassi hai le implementazioni che fanno il lavoro. (JAX-RS prevede che un metodo "erediti" le annotation JAX-RS da un metodo nella super-classe).
    si in effetti hai ragione.
    adesso vedo un attimo, perchè in verità era solo una cosa in più che volevo aggiungere.
    ma non è richiesta.
    valuto se ne vale la pena o meno....

    intanto grazie!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.