rest服务例子
1、接口类(IHello)
Java代码
- import javax.ws.rs.GET;
- import javax.ws.rs.Path;
- import javax.ws.rs.PathParam;
- import com.bean.Result;
- @Path("/find/")
- public interface IHello {
- /**
- * 登录
- * @param userName 帐号
- * @param userPass 密码
- * @return
- */
- @POST
- @Path("/login")
- Result login(@FormParam("userName")String userName,@FormParam("userPass")String userPass);
- /**
- * 按名称查询
- * @param who 名字
- * @return
- */
- @GET
- @Path("/findByName/{who}")
- Result findByName(@PathParam("who")String who);
- }
2、实现类(HelloImpl)
Java代码
- public class HelloImpl implements IHello {
- @Override
- public Result findByName(String who) {
- //逻辑实现
- }
- @Override
- public Result login(String userName, String userPass) {
- //逻辑实现
- }
- }
3、返回实体(Result)
Java代码
- import java.util.List;
- import javax.xml.bind.annotation.XmlRootElement;
- @XmlRootElement(name = "result")
- public class Result implements Serializable{
- /**
- * 返回结果
- */
- private List
lstUser; - public List
getLstUser() { - return lstUser;
- }
- public void setLstUser(List
lstUser) { - this.lstUser = lstUser;
- }
- }
4、app-rest.xml配置
Xml代码
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxrs="http://cxf.apache.org/jaxrs"
- xsi:schemaLocation="
- http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans.xsd
- http://cxf.apache.org/jaxrs
- http://cxf.apache.org/schemas/jaxrs.xsd">
- <import resource="classpath:META-INF/cxf/cxf.xml" />
- <import resource="classpath:META-INF/cxf/cxf-extension-jaxrs-binding.xml" />
- <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
- <jaxrs:server id="hello" address="/hello">
- <jaxrs:extensionMappings>
- <entry key="json" value="application/json" />
- <entry key="xml" value="application/xml" />
- jaxrs:extensionMappings>
- <jaxrs:serviceBeans>
- <ref bean="helloImpl" />
- jaxrs:serviceBeans>
- jaxrs:server>
- <bean id="helloImpl" class="com.HelloImpl" />
- beans>
5、依赖jar包
Xml代码
- <dependency>
- <groupId>org.apache.cxfgroupId>
- <artifactId>apache-cxfartifactId>
- <version>2.2.7version>
- <type>pomtype>
- <scope>compilescope>
- dependency>
- <dependency>
- <groupId>javax.ws.rsgroupId>
- <artifactId>jsr311-apiartifactId>
- <version>1.0version>
- <type>jartype>
- <scope>compilescope>
- dependency>
- <dependency>
- <groupId>commons-httpclientgroupId>
- <artifactId>commons-httpclientartifactId>
- <version>3.1version>
- dependency>
- <dependency>
- <groupId>org.springframeworkgroupId>
- <artifactId>springartifactId>
- <version>2.5.4version>
- dependency>
- <dependency>
- <groupId>org.springframeworkgroupId>
- <artifactId>spring-webmvcartifactId>
- <version>2.5.4version>
- dependency>
- <dependency>
- <groupId>javax.servletgroupId>
- <artifactId>servlet-apiartifactId>
- <version>2.5version>
- <type>jartype>
- <scope>providedscope>
- dependency>
6、web.xml配置
Xml代码
- <servlet>
- <servlet-name>CXFServletservlet-name>
- <servlet-class>org.apache.cxf.transport.servlet.CXFServletservlet-class>
- <load-on-startup>1load-on-startup>
- servlet>
- <servlet-mapping>
- <servlet-name>CXFServletservlet-name>
- <url-pattern>/rest/*url-pattern>
- servlet-mapping>
7、调用方法
方法一:
Java代码
- HttpClient httpClient = new HttpClient();
- GetMethod getMethod = new GetMethod("http://localhost:8080/Test/rest/hello/find/findByName/jack.xml");
- try {
- int status = httpClient.executeMethod(getMethod);
- if (status == 200) {
- XMLSource xmlSource = new XMLSource(getMethod.getResponseBodyAsStream());
- Result result = xmlSource.getNode("/", Result.class);
- System.out.println(result.getLstUser().size());
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
方法二:
Java代码
- IHello hello = (IHello) JAXRSClientFactory.create("http://localhost:8080/Test/rest/hello", IHello.class);
- Result result = hello.findByName("jack");
- System.out.println(result.getLstUser().size());
8、优缺点和注意事项
1.优缺点
优点:跨平台(支持xml和json格式)
缺点:效率低
2.注意事项
参数:如果不是java的基本类型需要封装成javabean,类必须加如下注解:
Java代码
- @XmlRootElement
- @XmlAccessorType(XmlAccessType.FIELD)
- public class Param {
- ...
- }
返回值:如果不是java基本类型需要封装成javabean,需要序列化,属性和类需要加如下注解:
Java代码
- @XmlRootElement(name = "result")
- public class Result implements Serializable {
- @Field
- private String id;
- ...
- }
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
