002.Jersey框架—基于JavaEE创建简单RESTful服务

说明:本笔记是在学习《Java RESTful Web Service实战》一书的笔记

一、项目结构如下图

项目结构

二、POM.xml如下



    4.0.0

    com.airkisser
    simple-service-webapp
    war
    1.0-SNAPSHOT
    simple-service-webapp

    
        simple-service-webapp
        
            
                org.apache.maven.plugins
                maven-compiler-plugin
                2.5.1
                true
                
                    1.7
                    1.7
                
            
        
    

    
        
            
                org.glassfish.jersey
                jersey-bom
                ${jersey.version}
                pom
                import
            
        
    

    
        
            org.glassfish.jersey.containers
            jersey-container-servlet-core
            
            
        
        
    
    
        2.9
        UTF-8
    

三、代码分析

web.xml(web配置)




    
        Jersey Web Application
        org.glassfish.jersey.servlet.ServletContainer
        
            jersey.config.server.provider.packages
            com.airkisser
        
        1
    
    
        Jersey Web Application
        /webapi/*
    

DeviceResource.java(资源)

package com.airkisser.api;

import com.airkisser.dao.DeviceDao;
import com.airkisser.entity.Device;

import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;

@Path("device")
public class DeviceResource {

    private final DeviceDao deviceDao;

    // 注入Dao
    public DeviceResource() {
        this.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;
    }

}

DeviceDao.java(模拟的Dao)

package com.airkisser.dao;

import com.airkisser.entity.Device;

import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;

public class DeviceDao {

    private ConcurrentMap fakeDB = new ConcurrentHashMap<>();

    public DeviceDao() {
        fakeDB.put("10.11.58.163", new Device("10.11.58.163"));
        fakeDB.put("10.11.58.185", new Device("10.11.58.185"));
    }

    public Device getDevice(String deviceIp) {
        return fakeDB.get(deviceIp);
    }

    public Device updateDevice(Device device) {
        String ip = device.getDeviceIp();
        if (ip != null && fakeDB.containsKey(ip)) {
           fakeDB.put(ip, device);
        }
        return fakeDB.get(ip);
    }
    
}

Device.java

package com.airkisser.entity;

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) {
        this.deviceIp = deviceIp;
    }

    // @XmlAttribute只能注解在get方法上,不能直接注解到属性上
    @XmlAttribute
    public String getDeviceIp() {
        return deviceIp;
    }

    public void setDeviceIp(String deviceIp) {
        this.deviceIp = deviceIp;
    }

    @XmlAttribute
    public int getDeviceStatus() {
        return deviceStatus;
    }

    public void setDeviceStatus(int deviceStatus) {
        this.deviceStatus = deviceStatus;
    }
}

四、测试

SoapUI工具测试

device资源的get方法测试

device资源的get方法测试

device资源的put方法测试

device资源的put方法测试

备注

启动程序后,输入http://localhost:8080/webapi/application.wadl可查看WADL内容


    
    
    
        
            
        
    
    
        
            
                
                    
                    
                
            
            
                
                    
                
                
                    
                    
                
            
        
    

你可能感兴趣的:(002.Jersey框架—基于JavaEE创建简单RESTful服务)