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. AngularJs-ui modal 封装 dialog

    常常在操作中和用户进行交互,及时反馈操作结果:用到alert 和confrim 功能 找到一个基于anguarjs-ui的modal,方便我们使用 angular-dialog-service 注意要 ...

  2. SQLServer2008 行转列2

    with a as ( select numb,name,row_number() over( partition by numb order by name desc) rowid from fen ...

  3. STL笔记(6)标准库:标准库中的排序算法

    STL笔记(6)标准库:标准库中的排序算法 标准库:标准库中的排序算法The Standard Librarian: Sorting in the Standard Library Matthew A ...

  4. URAL1057. Amount of Degrees(DP)

    1057 简单的数位DP  刚开始全以2进制来算的 后来发现要找最接近x,y值的那个基于b进制的0,1组合 #include <iostream> #include<cstdio&g ...

  5. gulp some tips

    gulp作为替代grunt的task runner后起之秀,基于nodejs的stream操作模型,大大减少了对磁盘的操作因此大大提高了性能. gulp error handling var gulp ...

  6. R语言多重共现性的检测

    1.kappa值 2. library(car)vif(lm.sol) 得到各个系数的方差膨胀因子,当0<VIF<10的时候,不存在多重共线性,当10<=VIF<100,存在较 ...

  7. CSS visibility与display 属性

    所有主流浏览器都支持 visibility 属性. 注释:任何的版本的 Internet Explorer (包括 IE8)都不支持 "inherit" 和 "colla ...

  8. link cut tree 入门

    鉴于最近写bzoj还有51nod都出现写不动的现象,决定学习一波厉害的算法/数据结构. link cut tree:研究popoqqq那个神ppt. bzoj1036:维护access操作就可以了. ...

  9. Amazium源码分析:(1)基本介绍

    前言 Amazium是一个网格系统的框架,分析该源码的目的是了解网格系统的实现. 网格系统 定义:设计美观页面布局的方式,上图能够很直观的了解什么是网格系统. 基本概念 column: 列. gutt ...

  10. MySQL Database on Azure - 利用PowerShell快速创建使用数据库服务

    如果您的应用需要通过脚本快速创建一个或多个MySQL数据库,MySQL Database on Azure目前开放了对于PowerShell的支持,可以帮助您快速利用自动化脚本进行数据库服务的创建.管 ...