`

CXF restful webserice同时支持几种协议 json, xml... 很简单

 
阅读更多
1. 假设我们有个服务  (都是从别处拿来的代码)

mport javax.ws.rs.*;
import javax.ws.rs.core.Response;


@Path(value = "/student/{id}")
public interface StudentService
{
    @GET
    @Path(value = "/info")
    Student getStudent(@PathParam("id") long id, @QueryParam("name")
    String name);

    @GET
    @Path(value = "/info2")
    UserResponse getStudent(@QueryParam("name") String name);
}


服务实现类:

import javax.ws.rs.core.Response;
import java.text.ParseException;
import java.text.SimpleDateFormat;

public class StudentServiceImpl implements StudentService
{
    public Student getStudent(long id, String name)
    {
        Student s = new Student();
        s.setId(id);
        s.setName(name);
        try
        {
            s.setBirthday(new SimpleDateFormat("yyyy-MM-dd").parse("1983-04-26"));
        }
        catch (ParseException e)
        {
            e.printStackTrace();
        }
        return s;
    }

    public Response getStudent1(String name)
    {
        Student s = new Student();
        s.setId(1);
        s.setName(name);
        try
        {
            s.setBirthday(new SimpleDateFormat("yyyy-MM-dd").parse("1983-04-26"));
        }
        catch (ParseException e)
        {
            e.printStackTrace();
        }

        return Response.ok(s).build();
        //return s;
    }

    public UserResponse getStudent(String name)
    {
        Student s = new Student();
        s.setId(1);
        s.setName(name);
        try
        {
            s.setBirthday(new SimpleDateFormat("yyyy-MM-dd").parse("1983-04-26"));
        }
        catch (ParseException e)
        {
            e.printStackTrace();
        }

        return new UserResponse("ok", s);
    }


返回数据包装类

import javax.xml.bind.annotation.*;

@XmlRootElement(name = "Response")
@XmlAccessorType(XmlAccessType.FIELD)
public class UserResponse
{
    private String status;

    private Student data;

    public UserResponse()
    {
    }

    public UserResponse(String status, Student data)
    {
        this.status = status;
        this.data = data;
    }

    public String getStatus()
    {
        return status;
    }

    public void setStatus(String status)
    {
        this.status = status;
    }

    public Object getData()
    {
        return data;
    }

    public void setData(Student data)
    {
        this.data = data;
    }
}


普通类


import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.Date;

@XmlRootElement(name = "Student")
@XmlAccessorType(XmlAccessType.FIELD)
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;
    }
}



Spring 服务声明


   
<import resource="classpath:META-INF/cxf/cxf.xml"/>
    <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"/>
    <import resource="classpath:META-INF/cxf/cxf-servlet.xml"/>
    <import resource="classpath:META-INF/cxf/cxf-extension-jaxrs-binding.xml"/>


    <bean id="rsStudentServiceImpl" class="ex3.StudentServiceImpl" />

    <jaxrs:server id="test" address="/student" >
        <jaxrs:serviceBeans>
            <ref bean="rsStudentServiceImpl" />
        </jaxrs:serviceBeans>
          
         <!-- 这里设置了对应关系, 按理说默认就应该是这样, 你可以试试. 当然可以自定义  -->
        <jaxrs:extensionMappings>
          <entry key="json" value="application/json"/>
          <entry key="xml" value="application/xml"/>
        </jaxrs:extensionMappings>
    </jaxrs:server>


web.xml 就不贴了, 和普通的一样.



2. 访问方法有3种, 可以实现获取不同格式的内容.

http://localhost:8080/student/student/3/info2.json?name=abcss
http://localhost:8080/student/student/3/info2.xml?name=abcss

http://localhost:8080/student/student/3/info2?name=abcss&_type=xml
http://localhost:8080/student/student/3/info2?name=abcss&_type=json

还有一种办法就是在请求时设置Accept:

      
 HttpGet get = new HttpGet(
                "http://127.0.0.1:8080/student/student/3/info2?name=Fetion");
        HttpClient httpclient = new DefaultHttpClient();

        get.addHeader("ACCEPT", "application/xml");

        HttpResponse response = httpclient.execute(get);

        StatusLine st = response.getStatusLine();

    InputStream ins = response.getEntity().getContent();
    byte[] b = new byte[1024];
    StringBuilder sb = new StringBuilder();
    while (ins.read(b) != -1)
    {
        sb.append(new String(b, "UTF-8"));
    }
    System.out.println(sb.toString());


简单吧.... 呵呵
分享到:
评论
4 楼 sophie_laputa 2012-05-30  
请问用的是哪一个版本的cxf呢
3 楼 bjyzxxds 2012-05-23  
你firebug看看刷新N次以后,获取不到参数时,页面提交的参数什么呢,然后分析原因,应该不会是webservice的问题
2 楼 zjc198805 2012-05-23  
联系方式:644952013
1 楼 zjc198805 2012-05-23  
LZ,为什么刷新按住N次以后请求就获取不到数据了?

相关推荐

    Spring CXF Restful 实例

    Spring Security可以与Spring CXF很好地集成,提供基于角色的访问控制和OAuth2支持。 8. **监控和日志**:为了监控服务性能和错误,我们可以配置Spring CXF的日志和跟踪功能,同时可以使用Spring Boot Actuator等...

    CXF Restful服务简单例子

    CXF框架支持RESTful服务的实现,让我们来详细探讨如何使用CXF构建一个简单的RESTful服务。\n\n一、CXF简介\nApache CXF是一个强大的Java框架,提供了一种灵活的方式来构建和部署Web服务。它支持多种Web服务规范,...

    cxf restful

    在本案例中,我们将深入探讨如何在不依赖Spring框架的情况下,仅使用CXF实现一个简单的RESTful服务,该服务能返回JSON格式的数据。 1. **CXF与RESTful服务**: RESTful是一种架构风格,强调资源的识别和通过HTTP...

    CXF整合spring同时支持JSON和XML配置的HelloWorld

    在本文中,我们将深入探讨如何将Apache CXF与Spring框架集成,以便同时支持JSON和XML的Web服务。Apache CXF是一个流行的开源框架,用于构建和消费Web服务,而Spring是Java开发中的一个全面的框架,提供了强大的依赖...

    CXF整合spring 支持restful xml json 上传下载的HelloWorld

    在这个“CXF整合spring 支持restful xml json 上传下载的HelloWorld”示例中,我们将探讨如何实现XML和JSON数据格式的支持,以及文件上传和下载功能。 首先,我们需要在Spring配置文件中声明CXF的Servlet,这样可以...

    cxf 开发restful服务

    CXF作为Java框架,提供了强大的支持来实现RESTful服务。 接下来,我们进入CXF与Maven的集成过程。Maven是Java项目管理工具,它帮助开发者管理项目的构建、依赖和生命周期。在创建CXF RESTful服务时,我们首先需要在...

    使用CXF开发RESTFul服务

    同时,CXF提供了很多工具和插件,如CXF的WS-Security、WS-I兼容性测试等,这些工具可以辅助开发和调试REST服务。 在【压缩包子文件的文件名称列表】中,`src`通常是源代码目录,包含了项目的所有Java源文件、资源...

    xml转json所需要的jar包

    XML(Extensible Markup Language)和JSON(JavaScript Object Notation)是两种常见的数据交换格式,广泛应用于Web服务和数据传输。XML以其丰富的结构化特性而闻名,而JSON则以简洁和易于解析的优势受到青睐。在...

    cxf实现restful资料

    Apache CXF是一个开源的SOAP和RESTful Web服务框架,支持多种协议和绑定机制。CXF允许开发者选择使用Java API for RESTful Web Services (JAX-RS)标准或者CXF自身的API来开发REST服务。JAX-RS是Java平台上的RESTful...

    cxf框架的webservice,传递json,xml

    综上所述,CXF框架提供了全面的工具和功能,使得开发和支持XML和JSON数据格式的Web服务变得简单。无论是服务端的开发,还是客户端的调用,CXF都能提供强大的支持。在实际项目中,理解并熟练运用CXF处理XML和JSON的...

    cxf发布RestFul接口。 maven

    &lt;bean class="org.apache.cxf.jaxrs.provider.json.JSONProvider"/&gt; &lt;bean id="helloWorldService" class="com.example.HelloWorldService"/&gt; ``` 4. **启动服务**:在主程序中,加载Spring配置并启动...

    cxf.xml,cxf-servlet.xml,cxf-extension-soap.xml

    &lt;import resource="classpath:META-INF/cxf/cxf.xml"/&gt; &lt;import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"/&gt; &lt;import resource="classpath:META-INF/cxf/cxf-servlet.xml"/&gt;

    CXF2.6 spring 提供rest服务输出xml或json等格式数据

    CXF作为一个开源的Web服务框架,它支持SOAP和REST两种服务模型,尤其在处理REST服务时表现出强大的功能。本文将详细探讨如何使用CXF 2.6版本与Spring框架结合,来提供REST服务并输出XML或JSON格式的数据。 首先,...

    CXF restful风格WebService

    - **JSON和XML支持**:CXF内置了对JSON和XML的支持,可以通过`@Consumes`和`@Produces`注解指定输入和输出格式。 - **安全机制**:可以集成OAuth、JWT等安全框架,实现RESTful服务的安全访问。 总的来说,Apache ...

    CXF RESTful spring maven CRUD

    - **RESTful**:REST(Representational State Transfer,表述性状态转移)是一种网络应用程序的设计风格和开发方式,主要基于HTTP协议,使用URI(Uniform Resource Identifier)作为资源定位,以JSON或XML格式交换...

    cxf集成Spring的restful WebService接口

    它不仅支持SOAP协议,还支持RESTful风格的API。而Spring框架则是一个全面的企业级应用开发框架,两者结合可以创建强大的、灵活的Java应用程序。本教程将深入探讨如何在Spring环境中集成CXF以实现RESTful WebService...

    cxf webservice restful实现

    - 使用JAXB进行数据绑定:CXF支持JAXB(Java Architecture for XML Binding),可以通过注解将Java对象自动转换为JSON或XML格式,方便RESTful接口的数据交换。 - 定义资源路径:使用`@Path`注解定义资源路径,如`@...

    CXF开发WebSerice教程

    - **数据绑定**:CXF支持JAXB(Java Architecture for XML Binding)进行XML与Java对象之间的转换。 - **拦截器**:你可以自定义拦截器来扩展服务功能,比如日志记录、性能监控等。 - **传输协议**:CXF不仅支持SOAP...

    WebServiceConfig java springboot利用Apache CXF创建webserice接口配置类

    webserviceApache CXF java springboot利用Apache CXF创建webserice接口 Apache CXF 核心架构是以BUS为核心,整合其他组件。 * Bus是CXF的主干, 为共享资源提供一个可配置的场所,作用类似于Spring的...

    CXF利用Json格式传输对象

    CXF还提供了内置的`org.apache.cxf.jaxrs.provider.json.JSONProvider`,可以直接处理JSON数据。只需在服务端或者客户端的配置中注册这个提供者,就可以自动处理JSON序列化和反序列化。 5. RESTful服务与JSON 在...

Global site tag (gtag.js) - Google Analytics