java怎么拦截某个对象
327
2022-09-24
WebService专题(八)-CXF发布REST服务
1.什么是REST
定义:REST就是一种编程风格,它可以精确定位网上资源(服务接口、方法、参数)REST支持数据格式:XML、JSONREST支持发送方式:GET,POS
2.CXF+Spring整合REST服务
2.1.需求
第一个:查询单个学生 第二个:查询多个学生
2.2.实现
2.2.1.服务端
导入依赖
2.创建学生类,需要加入@ XmlRootElement
@XmlRootElement(name="student")//@XmlRootElement可以实现对象和XML数据之间的转换public class Student { private long id; private String name; private Date birthday; public long getId() { return id; } public void setId(long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; }}
3.创建SEI接口
@WebService@Path("/student")//@Path("/student")就是将请求路径中的“/student”映射到接口上public interface StudentInterface { /** * 根据id查询单个学生 * @param id * @return */ @GET //指定请求方式,如果服务端发布的时候指定的是GET(POST),那么客户端访问时必须使用GET(POST) @Produces(MediaType.APPLICATION_XML_VALUE)//指定服务数据类型 @Path("/query/{id}")//@Path("/query/{id}")就是将"/query"映射到方法上,"{id}"映射到参数上,多个参数,以“/”隔开,放到“{}”中 public Student queryStuById(@PathParam("id")long id); /** * 根据查询多个学生 * @param name * @return */ @GET @Produces({MediaType.APPLICATION_XML_VALUE,"application/json;charset=utf-8"}) @Path("/querylist/{name}") public List
4.创建SEI接口实现类
public class StudentInterfaceImpl implements StudentInterface { @Override public Student queryStuById(long id) { Student st = new Student(); st.setId(id); st.setName("张三"); st.setBirthday(new Date()); return st; } @Override public List
5.发布服务
public class StudentServer { public static void main(String[] args) { // JAXRSServerFactoryBean发布REST的服务 JAXRSServerFactoryBean factoryBean = new JAXRSServerFactoryBean(); // 设置服务实现类 factoryBean.setServiceBean(new StudentInterfaceImpl()); // 设置资源类,如果有多个资源类,可以以“,”隔开。 factoryBean.setResourceClasses(StudentInterfaceImpl.class); // 设置服务地址 factoryBean.setAddress(" // 发布服务 factoryBean.create(); System.out.println("服务已经发布....."); }}
6.测试服务 测试查询单个学生:结果如下:
测试查询多个学生:GET请求默认是xml类型: 结果如下:
多个类型选择:结果如下:
{"student": [ {"birthday":"2017-11-19T21:41:28.204+08:00","id":110,"name":"张三"}, {"birthday":"2017-11-19T21:41:28.204+08:00","id":120,"name":"李四"} ]}
备注:
如果服务端发布时指定请求方式是GET(POST),客户端必须使用GET(POST)访问服务端,否则会报异常 如果在同一方法上同时指定XML和JSON媒体类型,默认返回XML
2.2.2.客户端
public class HttpClient { public static void main(String[] args) throws Exception { System.out.println("haha"); // 第一步:创建服务地址,不是WSDL地址 URL url = new URL(" // 第二步:打开一个通向服务地址的连接 HttpURLConnection connection = (HttpURLConnection) url.openConnection(); // 第三步:设置参数 // 3.1发送方式设置:POST必须大写 connection.setRequestMethod("GET"); // Post 请求不能使用缓存 connection.setUseCaches(false); connection.setInstanceFollowRedirects(true); // 3.2设置数据格式:content-type // 3.3设置输入输出,因为默认新创建的connection没有读写权限, connection.setDoInput(true); connection.setDoOutput(true); // 第五步:接收服务端响应,打印 int responseCode = connection.getResponseCode(); if (200 == responseCode) {// 表示服务端响应成功 InputStream is = connection.getInputStream(); InputStreamReader isr = new InputStreamReader(is,"UTF-8"); BufferedReader br = new BufferedReader(isr); StringBuilder sb = new StringBuilder(); String temp = null; while (null != (temp = br.readLine())) { sb.append(temp); } System.out.println(sb.toString()); // dom4j解析返回数据,课下作业 is.close(); isr.close(); br.close(); } }}
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~