14_CXF發布REST服務


【rest服務】

  REST服務是一種軟件架構模式,只是一種風格。REST服務采用HTTP做傳輸協議。

REST對於HTTP的利用分為以下兩種:

一.資源定位

  REST要求對方資源定位更加准確,如下:

  非REST方式:http://127.0.0.1:12345/queryUser.action?userType=student&id=001

  REST   方式:htpp://127.0.0.1:12345/student/001

  REST方式表示互聯網上的資源更加准確,但也有缺點,當目錄的層級較多時會導致較難理解。

二.資源操作

  利用HTTP的GET、POST、PUT、DELETE四種操作來表示數據庫操作的SELECT、UPDATE、INSERT、DELETE操作。

  比如:

  1.查詢學生的方法,設置HTTP的請求方法為GET,

  url如下:http://127.0.0.1:12345/user/student/001

  2.添加學生的方法,設置HTTP的請求方法為PUT,

  url如下:http://127.0.0.1:12345/user/student/001/張三/...
  REST常用於資源定位,資源的操作方式較少使用。

 

【使用場景】

  REST是一種軟件架構理念,現在被移植到web服務上,那么在開發Web服務上,偏於面向資源的服務的適用於REST,REST簡單易用,效率高,SOAP成熟度較高,安全性好。

  注意:REST不等於WebService,JAX-RS只是將REST設計風格應用到Web服務上。

 

【代碼需求】

查詢學生信息,傳輸參數為學生信息id,在url中定義,如http://127.0.0.1:12345/user/student/001,

其中001就是參數。

注意:REST一般返回結果格式:XML 或 JSON

【工程截圖】

 

【Student.java】

package com.Higgin.ws.cxf.rest.pojo;

import java.util.Date;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name="student") public class Student {
    private long id;
    private String name;
    private Date birthday;
       
    //忽略 get/set 方法.....
}

 

【StudentService.java】

package com.Higgin.ws.cxf.rest.service;

import java.util.List;

import javax.jws.WebService;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;


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

import com.Higgin.ws.cxf.rest.pojo.Student;

@WebService @Path("/student")
public interface StudentService {
    
    //查詢學生信息
    @GET    //http的get方法
    @Path("/query/{id}")  //id參數通過url傳遞
    @Produces(MediaType.APPLICATION_XML)  //設置媒體類型xml格式
    public Student queryStudent(@PathParam("id")long id);
    
    //查詢學生列表
 @GET @Path("/queryList/{type}")
    //設置媒體類型為XML格式和JSON格式
    @Produces({"application/json;charset=utf-8",MediaType.APPLICATION_XML})
    /* 如果想讓rest返回xml,需要在rest的url后邊添加 ?_type=xml,默認為xml
            如果想讓rest返回json.需要在rest的url后邊添加?_type=json*/
    public List<Student> queryStudentList(@PathParam("type") String type);
}

【StudentServiceImpl.java】

package com.Higgin.ws.cxf.rest.service;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import com.Higgin.ws.cxf.rest.pojo.Student;

public class StudentServiceImpl implements StudentService{

    @Override
    public Student queryStudent(long id) {
        //使用靜態數據來表示
        Student student=new Student();
        student.setId(id);
        student.setName("張三");
        student.setBirthday(new Date());
        return student;
    }

    @Override
    public List<Student> queryStudentList(String type) {
        //使用靜態數據來表示
        List<Student> list=new ArrayList<>();
        Student student1=new Student();
        student1.setId(1001);
        student1.setName("張三");
        student1.setBirthday(new Date());
        
        Student student2=new Student();
        student2.setId(1002);
        student2.setName("張三");
        student2.setBirthday(new Date());
        
        list.add(student1);
        list.add(student2);
        
        return list;
    }
}

 

【StudentServer.java】

package com.Higgin.ws.cxf.rest.server;

import org.apache.cxf.jaxrs.JAXRSServerFactoryBean;

import com.Higgin.ws.cxf.rest.service.StudentServiceImpl;

public class StudentServer {
    
    public static void main(String[] args) {
        //使用jaxrsServerFactoryBean發布rest服務
        JAXRSServerFactoryBean jaxrsServerFactoryBean=new JAXRSServerFactoryBean();
        //設置rest的服務地址
        jaxrsServerFactoryBean.setAddress("http://127.0.0.1:12345/rest");
        //設置服務對象
        jaxrsServerFactoryBean.setServiceBean(new StudentServiceImpl());
        //設置資源對象(如果有多個pojo對象,對象中間以","隔開即可)
        jaxrsServerFactoryBean.setResourceClasses(StudentServiceImpl.class);
        //發布rest服務
        jaxrsServerFactoryBean.create();
    }
}

【啟動服務】使用Java Application啟動main方法

1.在瀏覽器中輸入 http://127.0.0.1:12345/rest/student/query/666

2.在瀏覽器中輸入 http://127.0.0.1:12345/rest/student/queryList/123

3.在瀏覽器中輸入 http://127.0.0.1:12345/rest/student/queryList/001?_type=xml

 

4.在瀏覽器中輸入 http://127.0.0.1:12345/rest/student/queryList/001?_type=json

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM