package com.example;

import javax.ws.rs.GET;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType; import com.example.dao.DeviceDao;
import com.example.domain.Device; @Path("device")
public class DeviceResource {
private final DeviceDao deviceDao; public DeviceResource() {
deviceDao = new DeviceDao();
} @GET
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
public Device get(@QueryParam("ip") final String deviceIp) {
Device result = null;
if (deviceIp != null) {
result = deviceDao.getDevice(deviceIp);
}
return result;
} @PUT
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
public Device put(final Device device) {
Device result = null;
if (device != null) {
result = deviceDao.updateDevice(device);
}
return result;
}
}
package com.example.domain;

import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement(name = "device")
public class Device {
private String deviceIp;
private int deviceStatus; public Device() {
} public Device(String deviceIp) {
super();
this.deviceIp = deviceIp;
} @XmlAttribute
public String getIp() {
return deviceIp;
} public void setIp(String deviceIp) {
this.deviceIp = deviceIp;
} @XmlAttribute
public int getStatus() {
return deviceStatus;
} public void setStatus(int deviceStatus) {
this.deviceStatus = deviceStatus;
}
}

  

package com.example.dao;

import java.util.concurrent.ConcurrentHashMap;

import com.example.domain.Device;

public class DeviceDao {
ConcurrentHashMap<String, Device> fakeDB = new ConcurrentHashMap<>(); public DeviceDao() {
fakeDB.put("10.11.58.163", new Device("10.11.58.163"));
fakeDB.put("10.11.58.184", new Device("10.11.58.184"));
} public Device getDevice(String ip) {
return fakeDB.get(ip);
} public Device updateDevice(Device device) {
String ip = device.getIp();
fakeDB.put(ip, device);
return fakeDB.get(ip);
}
}

  

package com.example;

import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.MediaType; import org.glassfish.grizzly.http.server.HttpServer;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test; import com.example.domain.Device; public class DeviceResourceTest { private HttpServer server;
private WebTarget target; @Before
public void setUp() throws Exception {
server = Main.startServer();
final Client c = ClientBuilder.newClient();
target = c.target(Main.BASE_URI);
} @After
public void tearDown() throws Exception {
server.shutdownNow();
} @Test
public void testGetDevice() {
final String testIp = "10.11.58.184";
final Device device = target.path("device").queryParam("ip", testIp).request().get(Device.class);
Assert.assertEquals(testIp, device.getIp());
} @Test
public void testUpdateDevice() {
final String testIp = "10.11.58.163";
final Device device = new Device(testIp);
device.setStatus(1);
Entity<Device> entity = Entity.entity(device, MediaType.APPLICATION_XML_TYPE);
final Device result = target.path("device").request().put(entity, Device.class);
Assert.assertEquals(1, result.getStatus());
}
}

测试方式 1:通过DeviceResourceTest

2:通过google postman插件

												

第一个Java Rest服务的更多相关文章

  1. JMS(Java消息服务)入门教程

    什么是Java消息服务 Java消息服务指的是两个应用程序之间进行异步通信的API,它为标准消息协议和消息服务提供了一组通用接口,包括创建.发送.读取消息等,用于支持JAVA应用程序开发.在J2EE中 ...

  2. Unity手游之路<二>Java版服务端使用protostuff简化protobuf开发

    http://blog.csdn.net/janeky/article/details/17151465 开发一款网络游戏,首先要考虑的是客户端服务端之间用何种编码格式进行通信.之前我们介绍了Unit ...

  3. 交通银行 Java Socket 服务启动 管理 WINDOWS 版

    按照交通银行提供的无界面启动方法试验了很多次,都没有成功,所以自己动手用C# 知识写了一个. 小工具可以判断 交通银行 JAVA SOCKET 服务是否启动,并可以启动/关闭服务 主要代码如下: 判断 ...

  4. Intellij IDEA采用Maven+Spring MVC+Hibernate的架构搭建一个java web项目

    原文:Java web 项目搭建 Java web 项目搭建 简介 在上一节java web环境搭建中,我们配置了开发java web项目最基本的环境,现在我们将采用Spring MVC+Spring ...

  5. 【通信】Netty JBOSS提供的一个java开源框架

    Netty是由JBOSS提供的一个java开源框架.Netty提供异步的.事件驱动的网络应用程序框架和工具,用以快速开发高性能.高可靠性的网络服务器和客户端程序dsf. 也就是说,Netty 是一个基 ...

  6. 【JMeter】JMeter完成一个java请求的压测

    先定义一下我说的remoteService:即远程调用服务,没有http的url.不对外提供或者对外提供有限的服务.具体视各公司的代码架构所定,比如有些公司为web工程,scf服务,db.scf即为服 ...

  7. .Net 与 Java 的服务接口相互调用

    本文介绍.Net 与 Java 相互调用的例子.下面的介绍主要包括三方面:一是通过常用Web服务进行相互调用,二是使用TCP/IP套接字进行相互调用,三是使用Remote实现远程对象相互调用. 首先说 ...

  8. 高吞吐高并发Java NIO服务的架构(NIO架构及应用之一)

    高吞吐高并发Java NIO服务的架构(NIO架构及应用之一) http://maoyidao.iteye.com/blog/1149015   Java NIO成功的应用在了各种分布式.即时通信和中 ...

  9. Java 微服务框架 Redkale 入门介绍

    Redkale 功能 Redkale虽然只有1.xM大小,但是麻雀虽小五脏俱全.既可作为服务器使用,也可当工具包使用.作为独立的工具包提供以下功能:1.convert包提供JSON的序列化和反序列化功 ...

随机推荐

  1. dojo 十 ajax dojo/_base/xhr

    官方教程:Ajax with DojoAjax功能:1.从服务器加载静态数据2.从web服务中访问xml或json类型的数据3.将表单(form)数据发送到服务器4.刷新页面内容....Ajax在RI ...

  2. vc 6.0 连接数据库

    在mysql的文档(C:\Program Files\MySQL\MySQL Server 5.5\lib)里面找到libmysql.dll和libmysql.lib 两个文件,将他们移到 工程文件下 ...

  3. poj-3255-Roadblocks-路径可重复次短路

    题目: Roadblocks Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 7075 Accepted: 2629 Descri ...

  4. C# WebBrowser 设置代理完全解决方案

    微软webbrowser控件也就是IE插件,他的所有功能就像IE类似,当然设置也是一样的,下面介绍下webbrowser如何设置代理,可不要用这个对抗广告联盟哦 You can change the ...

  5. JavaScript高级程序设计之数据类型

    首先讲讲关于js文件放置的问题,如果把<script>放在head标签处,浏览器会先加载完该处的所有不使用defer属性的js文件再呈现页面的内容(浏览器在遇到body标签时才呈现内容), ...

  6. list::splice()函数详解

    http://blog.csdn.net/bichenggui/article/details/4674900 list::splice实现list拼接的功能.将源list的内容部分或全部元素删除,拼 ...

  7. 红黑树、B(+)树、跳表、AVL等数据结构,应用场景及分析,以及一些英文缩写

    在网上学习了一些材料. 这一篇:https://www.zhihu.com/question/30527705 AVL树:最早的平衡二叉树之一.应用相对其他数据结构比较少.windows对进程地址空间 ...

  8. core—线程与IO

    CPU执行线程期间,从内存里调用指令,然后运行,这些指令有可能要从硬盘里面,网络里,读取数据.我们知道在计算机硬件体系中,从内存读取数据的速度会大于从硬盘或网络里面的速度.线程必须要等到硬盘里面的数据 ...

  9. Android中使用ListView实现分页刷新(线程休眠模拟)(滑动加载列表)

    当要显示的数据过多时,为了更好的提升用户感知,在很多APP中都会使用分页刷新显示,比如浏览新闻,向下滑动到当前ListView的最后一条信息(item)时,会提示刷新加载,然后加载更新后的内容.此过程 ...

  10. HDU 3448 Bag Problem

    这是一道搜索的背包题目 题意: 有n件物品从中最多选m件,使其总重量不超过v,求能获得的最大重量 有一个很重要的剪枝(是数据的问题还是这个剪枝本身很高效?): 如果重量最大m件物品都不超过v,则答案就 ...