I'm trying to create jersey resources programatically (without
Annotations). I have a method raiseAlarm that takes a Name and id as input
parameter. I want to take Name from the JSON input and I want id to come
from path parameter. The code looks some thing like this...
{code}
public class JerseyExample {
public static void main(String[] args) {
JerseyExample deployer = new JerseyExample();
deployer.init();
}
public static class BaseResource extends ResourceConfig {
public BaseResource() {
init();
}
public void init() {
try {
Resource.Builder resourceBuilder2 = Resource.builder();
resourceBuilder2.path("/raiseAlarm/{id}");
ResourceMethod.Builder method2 = resourceBuilder2.addMethod("POST")
.consumes(MediaType.APPLICATION_JSON_TYPE)
.produces(MediaType.APPLICATION_JSON_TYPE)
.handledBy(this,
this.getClass().getMethod("raiseAlarm", Name.class, String.class));
Resource childResource1 = resourceBuilder2.build();
Resource.Builder resourceBuilder = Resource.builder();
resourceBuilder.path("/employee/status");
resourceBuilder.addChildResource(childResource1);
Resource rootResource = resourceBuilder.build();
registerResources(rootResource);
} catch (Exception e) {
e.printStackTrace();
}
}
public String raiseAlarm(Name notification,_at_PathParam("id") String id) {
System.out.println("INSIDE RAISE ALARM ");
System.out.println(notification.toString() + " ID: "+id);
return "Result";
}
public void destroy() {
}
public static class Name {
String firstName;
String lastName;
String middleName;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getMiddleName() {
return middleName;
}
public void setMiddleName(String middleName) {
this.middleName = middleName;
}
@Override
public String toString() {
return firstName + " " + middleName + " " + lastName;
}
}
}
public void init() {
Server server = new Server();
ServletContextHandler context0 = new
ServletContextHandler(ServletContextHandler.SESSIONS);
ServletHolder serveltHolder1 = new ServletHolder(new
ServletContainer(new BaseResource()));
context0.addServlet(serveltHolder1, "/*");
context0.setVirtualHosts(new String[]{"@external"});
ServerConnector connector = new ServerConnector(server);
connector.setHost("localhost");
connector.setPort(9069);
connector.setName("external");
HandlerCollection collection = new HandlerCollection();
collection.addHandler(context0);
server.setHandler(collection);
server.addConnector(connector);
try {
server.start();
server.join();
} catch (Exception e) {
e.printStackTrace();
}
}
}
{code}
The above code works. I want to know a way in which I can declare the Path
paramenters or Query parameters programatically, so that I can define my
method signature as raiseAlarm(Name notification,String id) and avoid
@PathParam("id") annotation.
Regards,
Rajat.