2013-02-14 7 views
13

mam spokojny sposób usług internetowych, takich jak ten:Spożywać metodę Restful z URL z datą 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"; 
} 

Jak mogę powołać się na tę metodę z WebBrowser ?, problemem jest Date param że kiedy try daje mi 404 nie znaleziono lub 500 wewnętrznego błędu serwera.

+0

Czy przejdzie milisekundy? –

Odpowiedz

14

Sugerowałbym przyjęcie daty jako String i przeanalizowanie go samemu. Tak:

@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"; 
}

dotyczących sposobu, aby ten wniosek za pośrednictwem przeglądarki jest:

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

rzeczy do rozważenia podczas analizowania dat:

  • SimpleDateFormat jest bardzo elastyczny z parsowania inny termin formaty. W ISO standard for date struny jest: yyyy-MM-dd

  • Joda Java date API akceptuje pełniejszej realizacji datę/czas, a szczególnie dla some believe that it is more optimised than Java's native date API parsowania dat.

  • Często lepiej jest podawać daty jako znaczniki czasu epoki, szczególnie jeśli aplikacja działa w różnych strefach czasowych. Musisz jednak zdawać sobie sprawę z problemów z buforowaniem HTTP podczas akceptowania znaczników czasu epoki (np. Jeśli twoi klienci nie skracają znaczników czasu epoki, wtedy dostaniesz dużo braków w pamięci podręcznej). Odwołuję się do numeru ISO-8601, ponieważ sformatowane daty są łatwiejsze do buforowania HTTP.

+1

To jest preferowana metoda IMHO. Twój marshaller JSON najprawdopodobniej zepsuje klasę 'Date' w swoich polach, więc skończysz z obiektem' Date' w twoim JSON-ie, a nie ładnym 'String'. – Nicholas

0

To zależy od formatu daty w adresie URL. Zgodnie z this question powinien działać dowolny format obsługiwany przez konstruktora Date(String). Jeśli twój format daty jest inny i nie możesz go zmienić, musisz iść z rozwiązaniem pestrella i otrzymać datę w postaci ciągu znaków i przekonwertować go samemu.

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

To jest dokładna kopia zaakceptowanej odpowiedzi z niewielkimi zmianami w nazwach zmiennych. – JJJ