【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

