Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[Java EE] Het implementeren van JAX-RS lukt me niet

Pagina: 1
Acties:

  • Lethalis
  • Registratie: April 2002
  • Niet online
[update] Ik heb het inmiddels zelf aan de praat gekregen :X

Hallo, ik heb een bestaande Java Web Application (gemaakt met NetBeans) met de naam WebApplicationTest en probeer nu een REST api te maken die ik straks vanuit AngularJS (JavaScript) kan benaderen.

Ik heb de volgende TestService class gemaakt:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package test;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Application;
import javax.ws.rs.core.MediaType;

/**
 *
 * @author marc
 */
public class TestService extends Application {

  @GET
  @Path("/users/{id}")
  @Produces(MediaType.APPLICATION_JSON)
  public Person getPersonById(@PathParam("id") int id) {
    Person p = new Person();
    p.setPersonID(1);
    p.setName("Marc");
    return p;
  }

}


In mijn web.xml heb ik de volgende zaken opgenomen:

code:
1
2
3
4
5
6
7
8
   <servlet>
        <servlet-name>RestServlet</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>RestServlet</servlet-name>
        <url-pattern>/users/*</url-pattern>
    </servlet-mapping>


Als web application container gebruik ik Glassfish.

Van wat ik er tot nu toe van begrijp, zorgt de org.glassfish.jersey.servlet.ServletContainer ervoor dat mijn TestService zou moeten gaan werken. Dit lijkt echter niet het geval te zijn.

Ik heb allerlei url's geprobeerd, maar naar mijn idee had de volgende moeten werken:
http://localhost:8080/WebApplicationTest/users/1

Weten jullie wat ik over het hoofd zie? Ik heb al verschillende tutorials bekeken en die leggen vooral uit hoe de annotations werken en hoe je een REST api kan bouwen op basis van entities. Allemaal leuk en aardig, maar ik wil eerst dat mijn hello world achtige TestService werkt en dan kan ik de rest zelf wel.

Help! :D Het moet haast wel iets heel simpels zijn.

Ik heb o.a. de volgende pagina's geraadpleegd, maar die bevatten soms oude informatie en ik weet niet wat ik nou eigenlijk moet doen:

http://docs.oracle.com/cd...83/configure.htm#RESTF179
http://java.dzone.com/news/simple-restful-web-services
http://docs.oracle.com/javaee/7/tutorial/doc/jaxrs002.htm

Wat ik graag wil uiteindelijk:

http://www.radcortez.com/java-ee-7-with-angular-js-part-1/

Heb ook al met @ApplicationPath gespeeld, maar zonder effect. Het moet op de 1 of andere manier aan elkaar geknoopt worden. Misschien dat ik nog enkele annotations mis, of mijn web.xml niet klopt.

Ook lijkt het mogelijk te zijn om ermee te werken zonder van Application over te erven.

[edit]
Het werkt nu! Ik moest de ApplicationPath apart meegeven en de andere Path annotations aanpassen:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@ApplicationPath("api")
@Path("users")
public class TestService extends Application {

  @GET
  @Path("{id}")
  @Produces(MediaType.APPLICATION_JSON)
  public Person getPersonById(@PathParam("id") int id) {
    Person p = new Person();
    p.setPersonID(1);
    p.setName("Marc");
    return p;
  }

}


En nu kan ik naar:

http://localhost:8080/WebApplicationTest/api/users/1

Opgelost! web.xml is niet eens nodig.. argh, stom hoe je soms op zoiets simpels kan blijven hangen.

[ Voor 21% gewijzigd door Lethalis op 10-05-2014 14:01 ]

Ask yourself if you are happy and then you cease to be.