内嵌jetty 通过resteasy 实现restful接口
来源:互联网 发布:php解密专家 编辑:程序博客网 时间:2024/06/06 10:38
项目中有时会需要将一些功能暴露为webservice接口供其他应用调用,restful作为轻量级webservice是为不错的选择,使用resteasy我们需要很少的代码编写即可实现。
废话少说,上代码
示例model
public class User { private String id; private String name; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; }}
webservice接口
import javax.ws.rs.*;import javax.ws.rs.core.MediaType;import java.util.List;@Path("/user")public interface UserService { String MEDIA_TYPE_JSON_UTF8 = MediaType.APPLICATION_JSON + ";charset=UTF-8"; @GET @Path("/{id}") @Produces(MEDIA_TYPE_JSON_UTF8) User get(@PathParam("id") String id); @GET @Path("/all") @Produces(MEDIA_TYPE_JSON_UTF8) List<User> all(); @POST @Path("/add") @Produces(MEDIA_TYPE_JSON_UTF8) @Consumes(MEDIA_TYPE_JSON_UTF8) User add(User user); @DELETE @Path("/{id}") @Produces(MEDIA_TYPE_JSON_UTF8) void delete(@PathParam("id") String id);}
webservice接口实现(省略Dao实现)
import org.springframework.stereotype.Service;import org.springframework.transaction.annotation.Transactional;import javax.annotation.Resource;import java.util.List;@Service("DefaultUserService")@Transactionalpublic class DefaultUserService implements UserService { @Resource private UserDao userDao; @Override public User get(String id) { return userDao.get(id); } @Override public List<User> all() { return userDao.queryAll(); } @Override public User add(User user) { return userDao.save(user); } @Override public void delete(String id) { userDao.delete(id); }}rest服务端(jetty内嵌实现)
import org.eclipse.jetty.server.Connector;import org.eclipse.jetty.server.Server;import org.eclipse.jetty.server.ServerConnector;import org.eclipse.jetty.servlet.ServletContextHandler;import org.eclipse.jetty.servlet.ServletHolder;import org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher;import org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap;import org.jboss.resteasy.plugins.spring.SpringContextLoaderListener;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.stereotype.Component;import javax.annotation.PostConstruct;import javax.annotation.PreDestroy;import java.util.ArrayList;import java.util.List;@Component("restServer")public class RestServer { private Logger logger = LoggerFactory.getLogger(getClass()); private Server restServer; private String hostIp = "127.0.0.1"; private int port = 8097; @PostConstruct public void init(){ restServer = new Server(); final List<Connector> connectors = new ArrayList<>(); ServerConnector connectorV4 = new ServerConnector(restServer); connectorV4.setHost(hostIp); connectorV4.setPort(port); connectors.add(connectorV4); logger.info("IPV4 Connector Info:HostIP:"+this.hostIp+", Port:"+this.port); restServer.setConnectors(connectors.toArray(new Connector[connectors.size()])); ServletContextHandler contextHandler = new ServletContextHandler(); contextHandler.setContextPath("/");//设置上下文 contextHandler.addEventListener(new ResteasyBootstrap()); contextHandler.addEventListener(new SpringContextLoaderListener());//instead of ContextLoaderListener contextHandler.setInitParameter("contextConfigLocation", "classpath:spring.xml"); ServletHolder holder = new ServletHolder(HttpServletDispatcher.class); holder.setInitParameter("resteasy.servlet.mapping.prefix", "/");//resteasy前缀 holder.setInitOrder(1); holder.setAsyncSupported(true); contextHandler.addServlet(holder,"/*");//servlet过滤规则 restServer.setHandler(contextHandler); try { restServer.start(); } catch (Exception e) { logger.error("rest server start failed!"); logger.error(e.getMessage(), e); } } @PreDestroy public void destroy() { if(restServer != null){ try { restServer.stop(); } catch (Exception e) { logger.error(e.getMessage(), e); } } } public void setHostIp(String hostIp) { this.hostIp = hostIp; } public void setPort(int port) { this.port = port; } public static void main(String[] args) { RestServer resourcePackageRest = new RestServer(); resourcePackageRest.init(); System.out.println("rest server started successful!"); }}maven 依赖
<dependency> <groupId>org.jboss.resteasy</groupId> <artifactId>jaxrs-api</artifactId> <version>3.0.11.Final</version> </dependency> <dependency> <groupId>org.jboss.resteasy</groupId> <artifactId>resteasy-jaxrs</artifactId> <version>3.0.11.Final</version> </dependency> <dependency> <groupId>org.jboss.resteasy</groupId> <artifactId>resteasy-jackson2-provider</artifactId> <version>3.0.11.Final</version> </dependency> <dependency> <groupId>org.jboss.resteasy</groupId> <artifactId>resteasy-servlet-initializer</artifactId> <version>3.0.11.Final</version> </dependency> <dependency> <groupId>org.jboss.resteasy</groupId> <artifactId>resteasy-spring</artifactId> <version>3.0.11.Final</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.1.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.1.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>4.1.5.RELEASE</version> </dependency> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-server</artifactId> <version>9.4.6.v20170531</version> </dependency> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-servlet</artifactId> <version>9.4.6.v20170531</version> </dependency>
此时,restful服务端已成功部署,浏览器可访问测试,resteasy会根据注解自动部署为webservice
restful客户端代码,非常简单的代码,通过ResteasyClient的target方法,会生成ResteasyWebTarget对象,通过他的proxy可直接生成对应api接口的rest客户端
import user.apis.UserService;import org.jboss.resteasy.client.jaxrs.ResteasyClient;import org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder;import org.jboss.resteasy.client.jaxrs.ResteasyWebTarget;public class RestResourcePackageClient{ private ResteasyWebTarget baseTarget; private String baseUri; public void init(){ if(baseUri == null || baseUri.length()==0){ throw new NullPointerException("base uri is null!"); } ResteasyClient client = new ResteasyClientBuilder().build(); baseTarget = client.target(baseUri); } public UserService userService() { return baseTarget.proxy(UserService.class); } public void setBaseUri(String baseUri) { this.baseUri = baseUri; }}客户端pom依赖
<dependency> <groupId>user.respack</groupId> <artifactId>respack-api</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>org.jboss.resteasy</groupId> <artifactId>resteasy-client</artifactId> <version>3.0.11.Final</version> </dependency> <dependency> <groupId>org.jboss.resteasy</groupId> <artifactId>resteasy-jackson2-provider</artifactId> <version>3.0.11.Final</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.9.0.pr4</version> </dependency>测试client
public class LocalTest { public static void main(String[] args) throws BusinessException { RestResourcePackageClient restResourcePackageClient = new RestResourcePackageClient(); restResourcePackageClient.setBaseUri("http://127.0.0.1:8097/"); restResourcePackageClient.init(); UserService userService = restResourcePackageClient.userService(); userService.all().forEach((user -> System.out.println("id:"+user.getId()+",name:"+user.getName()))); }}
阅读全文
0 0
- 内嵌jetty 通过resteasy 实现restful接口
- RESTEasy通过接口管理配置
- 用Resteasy实现restful web service
- Spring单元测试,内嵌RESTEasy服务的实现
- 项目内嵌Jetty实现优化部署
- 匿名内部类 通过接口来实现
- RESTEasy和restful WebService
- 【匿名内部类】通过内部类匿名实现接口
- springmvc 实现restful接口
- Restful接口实现方法
- Restful接口实现实例
- 内嵌jetty
- JavaWeb之Jetty和Tomcat内嵌服务器实现
- RestEasy(restful风格的)WebService
- restful接口ADF实现代码
- springMVC的Restful接口实现
- 使用SpringMVC实现RESTFul接口
- Maven webapp 内嵌 Jetty
- 信息化运维建设
- C++智能指针简单剖析
- 如何以代码的方式获取HTTP请求头和响应头
- Seal Report使用教程(一)——简单介绍
- BZOJ 1093 [ZJOI 2007] Tarjan+DAG拓扑排序DP 解题报告
- 内嵌jetty 通过resteasy 实现restful接口
- 《三体》读后思考-泰勒展开/维度打击/黑暗森林
- echarts + php 页面多统计图屏幕自适应
- 数据结构(c++)--map划分词典的相似单词
- C语言恶作剧(2):鼠标乱抖
- 【勤哲应用】用勤哲EXCEL服务器做销售订单人事管理系统
- 【HNOI2007】紧急疏散EVACUATE BFS+二分答案+最大流
- 2017"百度之星"程序设计大赛
- QT5.9编译Oracle12C驱动