3
我試圖以編程方式創建球衣資源(沒有註釋)。 我有一個方法raiseAlarm需要一個名稱和ID作爲輸入參數。我想從JSON輸入中取名,並且我希望id來自路徑參數。代碼看起來像這樣...以編程方式在Jersey中聲明路徑參數
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,@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();
}
}
}
上述代碼的作品。 我想知道一種方法,我可以以編程方式聲明Path參數或Query參數,以便我可以將我的方法簽名定義爲raiseAlarm(Name notification,String id)並避免@PathParam(「id」)註釋。
你有沒有弄清楚什麼出來呢?我想要做同樣的事情。 – kylejmcintyre