【发布时间】:2016-11-29 05:45:57
【问题描述】:
我想扩展或自定义我现有的 rest api。在我的休息中,服务调用应该包含业务逻辑(作为产品)的处理程序,我需要一种方法来扩展或定制它(每个客户定制)。请告知如何去做。附件是我的一个简单的 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 REST 项目。请参阅以下链接以获取完整的安装 zip 文件。
https://1drv.ms/u/s!AulFHVWnSJeFaqIB0JHKzo95DbU
感谢您的帮助。
【问题讨论】:
-
为什么
DefaultGreetingsHandler不是Rest方法? -
我想这是一个分层架构,REST/业务逻辑/DAO。这样,业务逻辑的关注点可以与 REST 请求和编组请求/响应对象分离。不过,@Sudhi 你的问题是什么,我很迷茫。
-
@Sander Verhagen,我正在寻找的是能够自定义 greetUser 的基本实现(包含业务逻辑),这将是客户特定的。基本实现是我的主要产品并具有默认行为,现在在我的不同客户中,我应该能够更改他们的(特定于客户的)自定义实现的默认行为,这些实现将在不同的代码库中
-
那么,您想要
GreetingsHandler接口的不同实现吗? -
是的,我想要一个不同的 GreetingsHandler 实现,它应该能够使用 DefaultGreetingsHandler。我确实在我的服务类中注入了我的注入,并且可以有一个命名注入,但是有没有其他方法可以在不触及原始代码的情况下做到这一点?这是一个产品,因此请考虑您的原始产品,每个客户/客户都可以在现有产品上进行自定义实施。请参考我的 OP 中的链接,它有一个简单的工作项目。
标签: java rest maven jersey jax-rs