packagecom.example;importjavax.ws.rs.GET;importjavax.ws.rs.PUT;importjavax.ws.rs.Path;importjavax.ws.rs.Produces;importjavax.ws.rs.QueryParam;importjavax.ws.rs.core.MediaType;importcom.example.dao.DeviceDao;importcom.example.domain.Device;
@Path("device")public classDeviceResource {private finalDeviceDao deviceDao;publicDeviceResource() {
deviceDao= newDeviceDao();
}
@GET
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })public Device get(@QueryParam("ip") finalString deviceIp) {
Device result= null;if (deviceIp != null) {
result=deviceDao.getDevice(deviceIp);
}returnresult;
}
@PUT
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })public Device put(finalDevice device) {
Device result= null;if (device != null) {
result=deviceDao.updateDevice(device);
}returnresult;
}
}
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 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);
}
}
packagecom.example;importjavax.ws.rs.client.Client;importjavax.ws.rs.client.ClientBuilder;importjavax.ws.rs.client.Entity;importjavax.ws.rs.client.WebTarget;importjavax.ws.rs.core.MediaType;importorg.glassfish.grizzly.http.server.HttpServer;importorg.junit.After;importorg.junit.Assert;importorg.junit.Before;importorg.junit.Test;importcom.example.domain.Device;public classDeviceResourceTest {privateHttpServer server;privateWebTarget target;
@Beforepublic void setUp() throwsException {
server=Main.startServer();final Client c =ClientBuilder.newClient();
target=c.target(Main.BASE_URI);
}
@Afterpublic void tearDown() throwsException {
server.shutdownNow();
}
@Testpublic voidtestGetDevice() {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());
}
@Testpublic voidtestUpdateDevice() {final String testIp = "10.11.58.163";final Device device = newDevice(testIp);
device.setStatus(1);
Entity 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插件