詳細介紹:http://www.ibm.com/developerworks/cn/java/j-lo-jaxrs/
1、定義一個User對象
package com.zf.test;import java.util.Date;import javax.xml.bind.annotation.XmlRootElement;@XmlRootElement(name="User") public class User { 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; } }
2、編寫Service介面
package com.zf.test;import javax.ws.rs.Consumes;import javax.ws.rs.GET;import javax.ws.rs.POST;import javax.ws.rs.Path;import javax.ws.rs.PathParam;import javax.ws.rs.Produces;import javax.ws.rs.QueryParam;import javax.ws.rs.core.MediaType;@Path(value="/user") @Produces(MediaType.TEXT_XML) //指定返回給用戶端的類型@Consumes(MediaType.TEXT_XML) //接收用戶端來的類型public interface IUserService { @GET @Path(value="/info/{id}")public User getUser(@PathParam("id") long id,@QueryParam("name") String name); @GET @Path(value="/info2") public User getUser(@QueryParam("name") String name); @POST@Path(value = "/info3")public User getUser(User user); }
3、實現Service類
package com.zf.test;import java.text.ParseException;import java.text.SimpleDateFormat;public class UserServiceImpl implements IUserService { public User getUser(long id,String name) { User user=new User(); user.setId(id); user.setName(name); try { user.setBirthday(new SimpleDateFormat("yyyy-MM-dd").parse("1987-02-01")); } catch (ParseException e) { e.printStackTrace(); } return user; } public User getUser(String name) { User user=new User(); user.setId(1); user.setName(name); try { user.setBirthday(new SimpleDateFormat("yyyy-MM-dd").parse("1985-03-01")); } catch (ParseException e) { e.printStackTrace(); } return user; }@Overridepublic User getUser(User user) {System.out.println("getUser");if(user != null)System.out.println( user.getId() + " " + user.getName() + " " + user.getBirthday().toLocaleString());elseSystem.out.println("user is null!");return user;} }
4、編寫用戶端
可以直接在瀏覽器中輸入 http://localhost:9999/user/info/3?name=is_zhoufeng 訪問。 在瀏覽器中會輸出如下結果:
<User><birthday>1987-02-01T00:00:00+08:00</birthday><id>3</id><name>is_zhoufeng</name></User>
(下面的操作之前,應該在用戶端產生對應的User類型。可以在服務端提供相應的xsd檔案。給用戶端產生。我這裡直接將User複製過去了)
首先根據服務端 編寫用戶端Service介面
package com.zf.vo;import javax.ws.rs.Consumes;import javax.ws.rs.GET;import javax.ws.rs.POST;import javax.ws.rs.Path;import javax.ws.rs.Produces;import javax.ws.rs.core.MediaType;@Path("/user")@Produces(MediaType.TEXT_XML) @Consumes(MediaType.TEXT_XML)public interface UserService {@POST@Path("/info3")User info(User user);@GET @Path(value="/info2") User info2(String name) ;}
訪問GET方法
package com.zf.vo;import org.apache.cxf.jaxrs.client.WebClient;public class RestClient {public static void main(String[] args) { WebClient client=WebClient.create("http://127.0.0.1:5555/user/info/3?name=is_zhoufeng");User user=(User)client.accept("text/xml").get(User.class); System.out.println(user.getName()); } }
訪問POST方法
package com.zf.vo;import java.util.Date;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class PostRestClient {public static void main(String[] args) {ApplicationContext cxt = new ClassPathXmlApplicationContext(new String[]{"applicationContext.xml","jaxrs-https.xml"});UserService countriesService = (UserService)cxt.getBean("userService");User user = new User();user.setBirthday(new Date());user.setId(3);user.setName("is_zhoufeng"); User u = countriesService.info(user);System.out.println(u.getId()); System.out.println(u.getName());System.out.println(u.getBirthday().toLocaleString());}}