springboot实现webservice接口自定义返回值通过postman测试

这篇具有很好参考价值的文章主要介绍了springboot实现webservice接口自定义返回值通过postman测试。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

震惊~~都2023年了竟然还有人用webservice!

1、springboot集成webservice

maven添加依赖

        <!--通过cxf实现webservice-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web-services</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-frontend-jaxws</artifactId>
            <version>3.5.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-transports-http</artifactId>
            <version>3.5.1</version>
        </dependency>
        <!--解析xml-->
        <dependency>
            <groupId>org.dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>2.1.3</version>
        </dependency>

添加配置文件

@Configuration
public class CxfConfig {

    //自定义拦截器 用于处理返回数据格式
    @Autowired
    private CxfOutterceptor cxfOutterceptor;

    @Bean
    public ServletRegistrationBean disServlet() {
        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new CXFServlet(), "/webService/*");
        return servletRegistrationBean;
    }

    @Bean(name = Bus.DEFAULT_BUS_ID)
    public SpringBus springBus() {
        return new SpringBus();
    }

    @Bean
    public Endpoint endpoint() {
        EndpointImpl endpoint = new EndpointImpl(springBus(), new AccountServiceImpl());
        //发布一个名为AccountService的webservice服务,可以多个
        endpoint.publish("/AccountService");
        endpoint.getOutInterceptors().add(cxfOutterceptor);
        return endpoint;
    }


}

自定义拦截器

@Component
public class CxfOutterceptor extends AbstractPhaseInterceptor<Message> {

    public CxfOutterceptor() {
        super(Phase.PRE_STREAM);
    }

    public CxfOutterceptor(String phase) {
        super(phase);
    }

    @Override
    public void handleMessage(Message message) throws Fault {
        try {
            OutputStream os = message.getContent(OutputStream.class);
            CachedStream cs = new CachedStream();
            message.setContent(OutputStream.class, cs);
            message.getInterceptorChain().doIntercept(message);
            CachedOutputStream csnew = (CachedOutputStream) message.getContent(OutputStream.class);
            InputStream in = csnew.getInputStream();
            String xml = IOUtils.toString(in);

            StringBuffer stringBuffer = new StringBuffer();

            //去掉外层包装
            Document document = DocumentHelper.parseText(xml);
            Element rootElement = document.getRootElement();
            List<Element> elements1 = rootElement.elements();
            if(elements1!=null && elements1.size()>0){
                Element element = elements1.get(0);
                List<Element> elements = element.elements();
                if(elements!=null && elements.size()>0){
                    Element aReturn = elements.get(0).element("return");
                    String name = aReturn.getName();
                    String adata = aReturn.getData().toString();

                    stringBuffer = new StringBuffer(adata);

                }
            }

            //这里对xml做处理,处理完后同理,写回流中
            IOUtils.copy(new ByteArrayInputStream(stringBuffer.toString().getBytes()), os);

            cs.close();
            os.flush();

            message.setContent(OutputStream.class, os);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private class CachedStream extends CachedOutputStream {

        public CachedStream() {

            super();

        }

        protected void doFlush() {

            //currentStream.flush();

        }

        protected void doClose(){

        }

        protected void onWrite(){

        }

    }

}

通过cxf实现wenservice服务返回结果是有一层固定包装的,类似下图,return标签里才是结果,如何完全自定义返回的结果数据呢?就需要上面的拦截器去掉外层的包装。

springboot实现webservice接口自定义返回值通过postman测试,积累,spring boot,postman,java,Powered by 金山文档

service类

@WebService(name = "AccountService",
        targetNamespace = "http://server.webservice.kaka.com"
)
public interface AccountService {

    @WebMethod
    public String sendMessage(@WebParam(name = "username",targetNamespace="http://server.webservice.kaka.com") String username);

    @WebMethod
    public boolean getFlag(@WebParam(name = "username",targetNamespace="http://server.webservice.kaka.com") String username);

    @WebMethod
    public String queryUsers();

}

实现类

@WebService(serviceName = "AccountService",
        //名命空间可任意写 要跟service里的保持一致
        targetNamespace = "http://server.webservice.kaka.com",
        //接口类的全路径
        endpointInterface = "com.kaka.webService.AccountService"
)
@Component
@Slf4j
public class AccountServiceImpl implements AccountService {

    @Override
    public String sendMessage(String username) {
        return "=====Hello! " + username + "=====";
    }

    @Override
    public boolean getFlag(String username) {
        return false;
    }

}

接下来启动服务,浏览器访问ip:端口/webservice/AccountService?wsdl

即可看到wsdl信息

springboot实现webservice接口自定义返回值通过postman测试,积累,spring boot,postman,java,Powered by 金山文档

2、postman测试

Headers添加

key:Content-type

value:text/xml;charset=utf-8

springboot实现webservice接口自定义返回值通过postman测试,积累,spring boot,postman,java,Powered by 金山文档

然后Body选择raw,XML

springboot实现webservice接口自定义返回值通过postman测试,积累,spring boot,postman,java,Powered by 金山文档
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body>
        <sendMessage xmlns="http://server.kaka.com">
            <username>测试啊</username>
    </sendMessage>
    </soap:Body>
</soap:Envelope>

如果使用了上面的自定义拦截器,则调用的返回结果为:文章来源地址https://www.toymoban.com/news/detail-597046.html

springboot实现webservice接口自定义返回值通过postman测试,积累,spring boot,postman,java,Powered by 金山文档

到了这里,关于springboot实现webservice接口自定义返回值通过postman测试的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用postman 调用 Webservice 接口

    使用postman 调用 Webservice 接口,postman,webService,接口,cxf

    2024年02月08日
    浏览(52)
  • SpringBoot调用第三方WebService接口的两种实现方式

    WebService接口的发布通常一般都是使用WSDL(web service descriptive language)文件的样式来发布的,该文档包含了请求的参数信息,返回的结果信息,我们需要根据WSDL文档的信息来编写相关的代码进行调用WebService接口。接下来我将采用常见的两种方式调用WebService接口。 目前我需要

    2024年02月12日
    浏览(64)
  • Postman进行Soap webservice接口测试

    许多人认为Postman是高级REST客户端,Postman是处理通过HTTP发送的请求的工具。其实Postman也可以测试与协议无关的SOAP webservice api接口。 要使用Postman发出SOAP请求,请执行以下操作: 1、提供SOAP端点作为URL,可以使用SOAP的WSDL的路径作为URL。 2、将请求方法设置为POST。 3、Body中选

    2024年01月20日
    浏览(46)
  • C# 调用SAP WebService接口(SoapUI Postman)

    SAP wsdl地址发放在浏览器中是需要输入用户名密码进行认证的 将wsdl地址放到SoapUI进行解析 输入用户名密码 左边就是请求的XML格式,右边是接口返回内容,点击运行就可以看到结果 Request1的地址就是我们需要调用的地址(这里提供的域名和wsdl 的域名不一致,需要换成wsdl的域

    2024年02月09日
    浏览(38)
  • Java调用WebService接口,SOAP协议HTTP请求返回XML对象

    Java调用Web service接口SOAP协议HTTP请求,解析返回的XML字符串: 1. 使用Java的HTTP库发送SOAP请求,并接收返回的响应。 可以使用Java的HttpURLConnection、Apache HttpClient等库。 2. 将返回的响应转换为字符串。 3. 解析XML字符串 ,可以使用Java的DOM解析器或者其他第三方库,如JDOM、DOM4J等。

    2024年01月19日
    浏览(44)
  • C# webservice 接收json数据 接口返回 远程服务器返回错误: (500) 内部服务器错误

    C# post 调用webservice 服务端接口,会返回上面那个错误,8成是发送的数据和接口不符合造成的。有2种情况 第一种情况如下:如果类型是默认request.ContentType = \\\"application/x-www-form-urlencoded\\\";这个类型 那么你发送数据和被调用接口参数名如果不对,则会报下图这个错 我发送的参数名

    2024年02月13日
    浏览(57)
  • 如何通过postman实现接口请求

    目录 1.创建一个集合 2.创建一个文件夹 3.在文件夹中创建一个基本请求      *设置请求的方式:get、post、delete、put      *设置请求的url地址      *设置请求的请求体body或请求参数params:       *设置请求头: 4.设置断言 5.点击send发送 6.配置环境 7.获取请求体中的数据并设置为

    2024年02月04日
    浏览(30)
  • 根据WebService接口地址获取接口定义文件(wsdl文件)

    目录 方法一:借助SoapUI生成 方法二:借助Visual Studio工具生成 根据webservice接口地址想生成wsdl文件,可以借助SoapUI生成 选中,右键,导出 以管理员身份运行命令行窗口,进入VS插件目录,使用svcutil.exe工具自动生成wsdl文件。 命令:cd C:Program Files (x86)Microsoft SDKsWindowsv7.0A

    2023年04月12日
    浏览(62)
  • SAP PO 接口配置1:连通WebService-通过PO调用第三方接口

    SAP 通过 PO 中间件进行接口调用,调用外部接口。 外部接口可以用任意方式生成,常见的REST类型接口即可,关于如何使用python生成接口,其他章节另述。 本教程的前置条件,PO中已配置Business Systems,并与SAP环境连通。 这里以常见的post接口做示例,如有其他类型接口,需要每

    2024年02月05日
    浏览(89)
  • java prometheus 自定义exporter开发,以及实现多个接口返回metrics

      exporter的作用是采集需要监控的数据,并将采集到的数据转换成prometheus所需要的数据格式,将这些转换后的数据返回,供给prometheus 使用。 java 编写自定义exporter所需要的pom.xml: exporter的四类指标说明 数据类型 解释 Counter Counter类型代表一种样本数据单调递增的指标,即

    2023年04月08日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包