chan
chan

Reputation: 481

REST GET/POST how to send and receive complex parameters?

I am using Jersey and converting my existing data services into RESTful data services. Most simple GETs and PUTs I could successfully convert. But following are some I am not able to convert:

  1. X Get (T) // for complex queries with complex result
  2. X Post (T) // for creating with complex result
  3. X PUT (T) // for updating with some success message object

where T and X are a complex objects

I have tried @queryparam, @pathparam with complex objects on GET with @consume & @produce and those didn't work. Also tried POST (though I really needed GET) with url encoded and that didn't work too.

Please Help. I am in need of sample code that does it.

Upvotes: 1

Views: 4671

Answers (1)

Qwerky
Qwerky

Reputation: 18435

REST isn't designed to handle complex queries as the query is actually the URL. When you retrieve a resource you specify the ID of the resource you want. This is simply a number or string and is easily represented in the URL for example;

http://host/employee/57

would get you employee 57. If your requirements are more complicated then you might want to use a search method, where you pass several parameters. You could use @QueryParam here but this isn't really REST in a pure form.

If you are POSTing or PUTting data then you use the same URL as you would if you were doing a GET, only this time you send data in the content body. As you are able to serialize the object in order to return it to a GET request your client should also be able to serialize it to send it to you in a PUT or POST.

Here's an example of a GET and POST;

@XmlType
public class Employee {
  private int id;
  private String name;

  //getters and setters
}


@Path("/employee")
public class EmployeeService {

  @GET
  @Path("/{id}")
  @Produces(MediaType.APPLICATION_XML)
  public Employee get(@PathParam("id") String id) {
    Employee e = employeeDao.getEmployee(id);
    if (e != null) {
      return e;
    } else {
      throw new WebApplicationException(404);
    }
  }

  @POST
  @Consumes(MediaType.APPLICATION_XML)
  @Produces(MediaType.APPLICATION_XML)
  public Employee post(Employee employee) {
    return employeeDao.insertEmployee(employee); //Assumes your DAO sets the ID
  }

}

Upvotes: 2

Related Questions