2016-08-30 2 views
1

Hallo an alle, ich habe Probe erholsamen Service unten mit Jersey 2Restful url durch Eigenschaftendatei

MODELL Klasse

@XmlRootElement(name = "book") 
@XmlType(propOrder = { "id", "name", "author", "price" }) 
public class Book { 

private String id; 
private String name; 
private String price; 
private String author; 

public Book() { 

} 

public Book(String id, String name, String price, String author) { 
    super(); 
    this.id = id; 
    this.name = name; 
    this.price = price; 
    this.author = author; 
} 

public String getId() { 
    return id; 
} 

public void setId(String id) { 
    this.id = id; 
} 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

public String getPrice() { 
    return price; 
} 

public void setPrice(String price) { 
    this.price = price; 
} 

public String getAuthor() { 
    return author; 
} 

public void setAuthor(String author) { 
    this.author = author; 
} 

} 

Mein DAOImpl

public class BooksImpl{ 
static Connection conn = null; 
static Statement stmt; 
ResultSet rs; 

public List<Book> getAllBooks() throws SQLException, ClassNotFoundException, FileNotFoundException { 
    getConnection(); 
    List<Book> arrBook = new ArrayList<Book>(); 
    rs = stmt.executeQuery(GET_ALL_BOOKS); 
    while (rs.next()) { 
     arrBook.add(new Book(rs.getString(1), rs.getString(2), rs.getString(3), rs.getString(4))); 
    } 
    rs.close(); 
    stmt.close(); 
    conn.close(); 
    return arrBook; 
} 

Dienst

@Path("/library") 
@Produces({ MediaType.APPLICATION_JSON + ";charset=UTF-8",MediaType.APPLICATION_XML + ";charset=utf-8" }) 
@Consumes({ MediaType.APPLICATION_JSON + ";charset=UTF-8",MediaType.APPLICATION_XML + ";charset=utf-8" }) 
public class BookServiceImpl implements BookService { 

private BooksImpl booksImpl = new BooksImpl(); 

@GET 
public Response getBooks(@QueryParam("format") String format) throws SQLException, ClassNotFoundException, FileNotFoundException { 
    return Response.status(Status.OK).entity(new GenericEntity<List<Book>>(booksImpl.getAllBooks()) { 
    }).header(HttpHeaders.CONTENT_TYPE, "XML".equalsIgnoreCase(format) 
      ? MediaType.APPLICATION_XML + ";charset=UTF-8" : MediaType.APPLICATION_JSON + ";charset=UTF-8") 
      .status(Status.OK).build(); 

} 

So endlich mache ich eine re Quest sagen in einem Briefträger wie ::

http://localhost:8080/BooksJAXRS/library 

Es ist gut, und ich kann die reponse erhalten, indem Sie alle Bücher von DB zu bekommen.

meine web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app id="WebApp_ID" version="2.4" 
xmlns="http://java.sun.com/xml/ns/j2ee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> 
<display-name>BooksJAXRS</display-name> 
<welcome-file-list> 
    <welcome-file>index.html</welcome-file> 
    <welcome-file>index.htm</welcome-file> 
    <welcome-file>index.jsp</welcome-file> 
    <welcome-file>default.html</welcome-file> 
    <welcome-file>default.htm</welcome-file> 
    <welcome-file>default.jsp</welcome-file> 
</welcome-file-list> 

<servlet> 
    <servlet-name>jersey-servlet</servlet-name> 
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
    <init-param> 
     <param-name>jersey.config.server.provider.packages</param-name> 
     <param-value>com.library.books</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>jersey-servlet</servlet-name> 
    <url-pattern>/*</url-pattern> 
</servlet-mapping> 

</web-app> 

ist mein requriment für verschiedene http Methoden, die wir verschiedene URL Endpunkt Pfade zum Beispiel haben

GET : http://localhost:8080/BooksJAXRS/library 
POST : http://localhost:8080/BooksJAXRS/library 
DELETE : http://localhost:8080/BooksJAXRS/library/1 
PUT : http://localhost:8080/BooksJAXRS/library/1 

ich mache also ein Requisiten

GET=http://localhost:8080/BooksJAXRS/library 
POST=http://localhost:8080/BooksJAXRS/library 
DELETE= http://localhost:8080/BooksJAXRS/library/1 
PUT= http://localhost:8080/BooksJAXRS/library/1 
Datei

Jetzt möchte ich diese erholsame URL erfassen und sie durch die Requisiten-Datei weitergeben und sie dementsprechend weiterleiten ng über die Methode und URL

Danke Mark

+0

'Aber ich wollte diesen URL-Pfad lesen ...aus meinen Properties-Dateien gelesen werden, wenn ein Client auf die URL klickt ... um alle Bücher zu erhalten. - [UriInfo und UriBuilder] (https://jersey.java.net/documentation/latest/uris-and-links.html) –

+0

@RomanVottner aktualisiert .. – mark

Antwort

0

Sie könnten 2-Zuordnungen auf 2 verschiedenen Methoden erstellen, die die gleiche private Methode wie folgt aufrufen:

@Path("/") 
... 
public class BookServiceImpl implements BookService { 

    @Path("/") 
    @GET 
    public Response getBooksByRoot(@QueryParam("format") String format) { 
     return getBooks(format); 
    } 

    @Path("/library") 
    @GET 
    public Response getBooksByLibrary(@QueryParam("format") String format) { 
     return getBooks(format); 
    } 

    private Response getBooks(String format) { 
     ... 
    } 

    @Path("/library") 
    @POST 
    public Response createBook(@QueryParam("name") String name) { 
     ... 
    } 

Antwort Update:

Es scheint, dass Sie eine dynamische Zuordnung wünschen, also müssen Sie einen Path mit einem regulären Ausdruck verwenden.

@Path("/") 
... 
public class BookServiceImpl implements BookService { 

    @Path("/{parameter:.*}") 
    @GET 
    public Response getBooks(@PathParam("parameter") String parameter) { 
     if (properties.getProperty("GET").endsWith(parameter) { 
      // code to get the books here 
     } else { 
      return Response.status(Response.Status.NOT_FOUND).build(); 
     } 
    } 

WARNUNG: Der Codeausschnitt oben nur gemeint, die Idee zu zeigen, ist es nicht perfekt sein soll. Zum Beispiel könnte das Testen mit endsWith Ihrem Kontext nicht genügen.

+0

Vielen Dank.By der Weg, indem Sie so tun, wird die URL laden durch Eigenschaften Datei? – mark

+0

Ich bin mir nicht sicher, ob ich verstehe, was Sie mit "laden durch Eigenschaften Datei" meinen, könnten Sie bitte klären? –

+0

Es tut mir leid, dass ich das tun werde. Wenn ein Client meine URL "http: // localhost: 8080/BooksJAXRS/library" erreicht, sollte er sofort in meine Eigenschaftendatei und von dieser Eigenschaftendatei abhängig vom URL-Endpunkt gehen, dh eine GET-Anfrage an/library sollte alle meine zurückgeben Bücher, POST-Anfrage an/Bibliothek sollte ein neues Buch usw. – mark

0

Bei der Verwendung von Standard-Webdeskriptoren (url-pattern/*) und annotierten Endpunkten (@Path/library) kann an diesen Punkten nicht so viel für dynamisches Routing (zur Laufzeit) getan werden. Wenn Sie einige dynamische Routen wollen oder müssen, setzen Sie eine Option, um die „App“ in einen neuen Kontext wie:

<servlet-mapping> 
    <servlet-name>jersey-servlet</servlet-name> 
    <url-pattern>/app/*</url-pattern> 
</servlet-mapping> 

Und fügen Sie einige Standard Servlet zu Ihrem gewünschten Endpunkte weiterleiten:

<servlet> 
    <servlet-name>route</servlet-name> 
    <servlet-class>my.package.Route</servlet-class> 
</servlet> 

<servlet-mapping> 
    <servlet-name>route</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 

my.package.Route wird auf einer anderen Anfrage als/app/* abgefragt und Sie können Ihre Weiterleitung ausführen, um die Anfrage irgendwo weiterzuleiten.

+0

es sagt java.lang.ClassNotFoundException: my.pack.route – mark

+0

Natürlich ist das Schreiben der Servlet-Klasse für Sie. – PeterMmm

Verwandte Themen