2013-02-14 18 views
13

Ho un metodo di servizio Web riposante come questo:Consumare metodo riposante da URL con Data Param Java

@GET 
@Path("/generateInfo") 
@Produces(MediaType.APPLICATION_JSON) 
public String generateInfo(
     @QueryParam("a") String a, 
     @QueryParam("b") String b, 
     @QueryParam("date") Date date) { 
    // ...business code... 
    return "hello world"; 
} 

Come posso richiamare che metodo da un browser web ?, il problema è il Date param che quando ho prova mi sta dando 404 non trovato o errore del server interno 500.

+0

I millisecondi che passano funzionano? –

risposta

14

Suggerirei di accettare la data come String e analizzarla da soli. In questo modo:

@GET 
@Path("/generateInfo") 
@Produces(MediaType.APPLICATION_JSON) 
public String generateInfo(
     @QueryParam("a") String a, 
     @QueryParam("b") String b, 
     @QueryParam("date") String date) { 

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 
    Date dateObj = sdf.parse(date); 

    return "hello world"; 
}

Il modo per fare questa richiesta attraverso un browser è:

http://localhost/your_service/generateInfo?date=2013-02-14

cose da considerare durante l'analisi date:

  • SimpleDateFormat è molto flessibile, con l'analisi di una data diversa formati. I ISO standard for date stringhe è: yyyy-MM-dd

  • Il Joda Java date API è accettato come un'implementazione più completa della data/ora, e in particolare per l'analisi some believe that it is more optimised than Java's native date API date.

  • spesso è meglio fornire date come timbri di epoca, soprattutto se l'applicazione funziona su diversi fusi orari. Tuttavia, è necessario essere consapevoli dei problemi di memorizzazione nella cache HTTP quando si accetta la data e l'ora (ad esempio se i client non stanno troncando i timestamp di epoca allora si avranno molti errori di cache). Vorrei fare riferimento a ISO-8601 poiché le date formattate sono più facili per la cache HTTP.

+1

Questo è il modo preferito IMHO. Molto probabilmente il tuo marshaller JSON analizzerà la classe 'Date' nei suoi campi, quindi ti ritroverai con un oggetto' Date' nel tuo JSON, piuttosto che un 'String' pulito. – Nicholas

0

Dipende dal formato della data nell'URL. Secondo this question, qualsiasi formato che il costruttore Date(String) può gestire dovrebbe funzionare. Se il formato della tua data è diverso e non puoi cambiarlo, dovrai andare con la soluzione di pestrella e ricevere la data come stringa e convertirla tu stesso.

0
@GET 
@Path("/generateInfo") 
@Produces(MediaType.APPLICATION_JSON) 

public String generateInfo(
@QueryParam("a") String a, 
@QueryParam("b") String b, 
@QueryParam("date") String str_date) { 

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); 

Date date = df.parse(str_date); 
return "hello world"; 
} 
+4

Questa è una copia esatta della risposta accettata con solo piccole modifiche nei nomi delle variabili. – JJJ