扩展和自定义现有REST API

时间:2016-11-29 05:45:58

标签: java rest maven jersey jax-rs

我想扩展或自定义我现有的休息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

感谢帮助。

1 个答案:

答案 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");
    }
}

这应该使您的应用程序正常工作。