我想扩展或自定义我现有的休息api。在我的休息中,服务调用Handler,它应该包含业务逻辑(作为产品),我需要一种方法来扩展或定制它(每个客户端定制)。请告知如何做到这一点。附件是我所拥有的一个简单的hello world设置,它可以很好地显示这个'DefaultGreetingsHandler.greetUser'的钩子。
package com.myapi.greetings.rest;
import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;
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.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import com.myapi.greetings.handler.GreetingsHandler;
import com.myapi.greetings.model.Greeting;
@Path("/greetings")
public class GreetingsService {
@Inject
GreetingsHandler handler;
@GET
@Path("/{name}")
public Response getCustomMessage(@PathParam("name") String name) {
String output = handler.greetUser(name);
return Response.status(200).entity(output).build();
}
}
我需要Handler.greetUser中的一个钩子才能为每个客户端定制
package com.myapi.greetings.handler;
import javax.inject.Inject;
import com.myapi.greetings.dao.GreetingsDao;
public class DefaultGreetingsHandler implements GreetingsHandler {
@Inject
GreetingsDao dao;
@Override
public String greetUser(String name) {
return dao.getGreeting() + name;
}
}
它是一个简单的基于maven的休息项目,在java中。有关完整的安装zip文件,请参阅以下链接。
https://1drv.ms/u/s!AulFHVWnSJeFaqIB0JHKzo95DbU
感谢帮助。
答案 0 :(得分:0)
创建一个新类MyApplicationBinder
import org.glassfish.hk2.utilities.binding.AbstractBinder;
public class MyApplicationBinder extends AbstractBinder {
@Override
protected void configure() {
bind(GreetingsHandler.class).to(GreetingsHandler.class);
}
}
然后在主应用程序类
中注册它@ApplicationPath("webapi")
public class MyApp extends ResourceConfig{
public MyApp() {
register(new MyApplicationBinder());
packages(true, "com.myapi.greetings.rest");
}
}
这应该使您的应用程序正常工作。