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. 创建下拉列表并通过ajax填充下拉数据

    $(document).ready(function(e) { jQuery.post('${basePath}/customerService/getCustomerService4List.do' ...

  2. 加密解密(7)*PKI基础知识(完整)

    PKI 基础知识 摘要 本白皮书介绍了加密和公钥基本结构(PKI)的概念和使用 Microsoft Windows 2000 Server 操作系统中的证书服务的基础知识.如果您还不熟悉加密和公钥技术 ...

  3. 【转】Android Launcher研究 (一)

    这份源码是基于2.1的launcher2,以后版本虽有变化,但大概的原理一直还是保留了. 一.主要文件和类  1.Launcher.java:launcher中主要的activity. 2.DragL ...

  4. Scrum Agile

    Scrum Agile 迭代式增量软件开发,敏捷开发,源于丰田汽车的制造流程. HMC测试流程: 1.hmc改配置 2.上ui验证 3.还原hmm(有的需要,有的不需要) 4.addReferal,在 ...

  5. Tyvj 1030 乳草的入侵

    以一个简单的BFS对基础搜索做一个收尾好了. 给一个草,然后以这棵草为九宫格的中心,每周向周围八个方向扩散,问多少个星期能把这个农场占满. 遍历整个map,最后一个出队列的对应的星期数就是所求. // ...

  6. POJ3592 Instantaneous Transference tarjan +spfa

    链接:http://poj.org/problem?id=3592 题意:题目大意:给定一个矩阵,西南角为出发点,每个单位都有一订价值的金矿(#默示岩石,不成达,*默示时佛门,可以达到指定单位),队# ...

  7. C#随机颜色和随机字母

    //随机获取颜色 public System.Drawing.Color GetRandomColor() { Random RandomNum_First = new Random(Guid.New ...

  8. POJ 2724 Purifying Machine (二分图匹配)

    题意 给定m个长度为n的01串(*既表示0 or 1.如*01表示001和101).现在要把这些串都删除掉,删除的方法是:①一次删除任意指定的一个:②如果有两个串仅有一个字符不同,则可以同时删除这两个 ...

  9. [asp.net] 通过JS实现对treeview控件的复选框单选控制。

    前端JS代码: //识别不同的浏览器 function getTargetElement(evt) { var elem if (evt.target) { elem = (evt.target.no ...

  10. Cython:基础教程(1) 语法

    1 变量定义 http://docs.cython.org/src/reference/language_basics.html http://blog.csdn.net/i2cbus/article ...