Я пытаюсь создать трикотажные ресурсы программно (без аннотаций). У меня есть метод raiseAlarm, который принимает имя и id в качестве входного параметра. Я хочу взять Name из ввода JSON, и я хочу, чтобы id появился из параметра path. Код выглядит примерно так:Объявлять параметры пути в программном обеспечении Джерси
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();
}
}
}
Приведенный выше код работает. Я хочу знать способ, которым я могу программно описать параметры Paraxers или Query, чтобы я мог определить свою подпись метода как raiseAlarm (уведомление о имени, идентификатор строки) и избежать аннотации @PathParam («id»).
Вы когда-нибудь сообразить что-нибудь по этому поводу? Я хочу сделать то же самое. – kylejmcintyre