最近做一个需求,其中有个节点涉及到需要在传统的SSH项目中开发RESTful风格的HTTP接口,供请求方访问,获取结果,响应处理结果,其开发风格与spring cloud中控制器(controller)开发风格相类似,通过使用标签来开发,处理请求,获取xml报文,响应xml报文结果,在这里分享自己在实际项目中的开发经历。共勉。

首先来看主体的代码:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.io.InputStreamReader;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;/*** 程序功能:接口(基于RESTful)-HTTP接口,返回接收结果* @author 只吃两个荞麦馒头* @date 2019-06-17**/
@Controller
@RequestMapping("/RemoteApplyPayBackService")
public class OnlinePayResultBackService {@RequestMapping(value = "/callBackNotify",method = RequestMethod.POST, produces = "text/xml;charset=UTF-8")public void getResultOfRemoteApplyPay(HttpServletRequest request, HttpServletResponse response){try{System.out.println("=============进入接口==========");// 获取HTTP请求的输入流BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream(), "UTF-8"));String buffer = null;// 存放请求内容StringBuffer xml = new StringBuffer();while ((buffer = br.readLine()) != null) {// 在页面中显示读取到的请求参数xml.append(buffer);} /*接收返回的参数进行业务逻辑的处理 -start *///获取支付回调结果:将请求的xml报文转换成对象OnlinePayBackParam param1 = (OnlinePayBackParam) XmlUtil.convertXmlStrToObject(OnlinePayBackParam.class, xml.toString());String orderNo   = param1.getOrderId();String payStatus = param1.getReturnResult();.......                    /*接收返回的参数进行业务逻辑的处理  -end *//*将处理结果告知请求方,返回xml报文 -start*/             /*返回参数:01-成功,00-失败*/String return_code = "01";returnXML(return_code,"",response);/*将处理结果告知请求方,返回xml报文 -end*/     br.close();}catch(Exception e){String return_code = "00";String return_msg = "接收失败";returnXML(return_code,return_msg,response);e.printStackTrace();}}/*** 程序功能:返回xml报文 * add 只吃两个荞麦馒头 2019-06-17* @param return_code* @param return_msg*/public void returnXML(String return_code,String return_msg,HttpServletResponse response){try {/*返回参数实体类*/ReturnParam returnParam =  new ReturnParam();returnParam.setReturn_code(return_code);returnParam.setReturn_msg(return_msg);String returnXML = XmlUtil.convertToXml(returnParam);OutputFormat format = OutputFormat.createCompactFormat();format.setEncoding("UTF-8");XMLWriter writer = new XMLWriter(response.getOutputStream());//控制xml中特殊字符转义问题,设为falsewriter.setEscapeText(false);writer.write(returnXML);writer.flush();writer.close();} catch (UnsupportedEncodingException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}

注:这里的业务逻辑处理看实际中项目的业务需求,需要进行什么操作。这里还涉及到xml报文与成Java bean对象相互转换。

两者之间具体怎么转换可参考下这位博主的博客:https://blog.csdn.net/songdeitao/article/details/17304395
这是我找了很久,对比之下,细节写的很详细、很全面的博客。我就不贴出自己的代码,大家可以根据自己需求参考上面这位博主的博客编写代码。

接下来讲一下,在原有的SSH项目上开发RESTful风格的HTTP接口,还需要的配置:

web.xml文件中添加如下配置:

<servlet><servlet-name>rest-servlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  <init-param><param-name>contextConfigLocation</param-name><param-value>classpath:rest-servlet.xml</param-value></init-param><load-on-startup>100</load-on-startup>
</servlet>
<servlet-mapping>  <servlet-name>rest-servlet</servlet-name><url-pattern>/RemoteApplyPayBackService/callBackNotify</url-pattern>
</servlet-mapping>

注:注意原有的项目中是否已经配置DispatcherServlet,不然就会有冲突。

还需在项目路径:WEB-INF/classes/下创建文件:rest-servlet.xml,配置如下:

    <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><context:component-scan base-package="com.sinosoft.lis.pos.wxpay" /><bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />  <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" /></beans>

注:如果是在本地测试,rest-servlet.xml放到项目src路径下即可,编译的时候,就会出现在WEB-INF/classes/下,如需发布,则需放到WEB-INF/classes/下。
上面配置文件中base-package属性应指向你接口文件所在的路径(包)。

如有不对的地方,欢迎各位大佬指正。

在原有的SSH项目上开发RESTful风格的HTTP接口相关推荐

  1. java restful接口开发实例_实战:基于Spring Boot快速开发RESTful风格API接口

    写在前面的话 这篇文章计划是在过年期间完成的,示例代码都写好了,结果亲戚来我家做客,文章没来得及写.已经很久没有更新文章了,小伙伴们,有没有想我啊.言归正传,下面开始,今天的话题. 目标 写一套符合规 ...

  2. SpringBoot开发Restful风格的接口实现CRUD功能

    一.前言 我们都知道SpringBoot的出现使得在开发web项目的时候变得更加方便.快捷.之前写过一篇文章是如何快速搭建一个springboot项目:SpringBoot入门:使用IDEA和Ecli ...

  3. Spring MVC开发RESTful风格的URI

    一.写在前面 RESTful结构可参考博文:https://blog.csdn.net/codejas/article/details/79799386 我们知道在HTTP 协议中,有四种操作方式的动 ...

  4. 用cxf开发restful风格的WebService

    我们都知道cxf还可以开发restful风格的webService,下面是利用maven+spring4+cxf搭建webService服务端和客户端Demo 1.pom.xml <projec ...

  5. SpringBoot2.1.5(39)--- 开发restful 风格Api

    SpringBoot 实现RestFul 相关注解的介绍 如果说你会使用SpringMVC 那么下面的内容你阅读将会很轻松,我这里通过搭建一个用户管理 接口API 让你快速学会如何创建restful ...

  6. B2C电商项目(第一天、项目搭建、Restful风格、拼音API、txMybatis、品牌增删改查、Swagger)

    B2C电商项目远程仓库 https://gitee.com/kinggm520/HappyShopping 一.项目架构 技术架构 系统架构图 工程结构关系图

  7. 【RESTful风格】软件接口设计中RESTful风格

    REST = Representational State Transfer 表述性状态转移,是一种软甲接口设计风格.总之就是一种风格 REST基于:HTTP.HTML.JSON.XML.URI 这些 ...

  8. spring整合cxf开发rest风格的webservice接口(客户端服务端)

    前面文章记录了在spring中如何整合cxf开发webservice客户端和服务端,其实,相较于原生开发方式,已经有了不少优化.rest风格的开发,作为一种极为流行的开发规范,可以帮助我们更加简洁高效 ...

  9. 【项目实战开发】第三章——在线生鲜商城系统

    系列文章目录 第一章--AI人机对战版五子棋游戏 第二章--在线商城系统 第三章--在线生鲜商城系统 文章目录 系列文章目录 前言 1.系统背景介绍 2. 功能需求分析 3.准备工作 3.1 用到的库 ...

最新文章

  1. 《极速切水果游戏》有Python版了,曾风靡一时的手游能否富过“二代”?
  2. go语言游戏编程-Ebiten使用矩阵实现对图的缩放和移动
  3. 【pytorch】.detach() .detach_() 和 .data==>用于切断反向传播
  4. python文本菜单程序_从〇到一: Python GUI 程序:记事本
  5. 如何自动从Word表格中提取高亮(不同颜色)文本--Java实现
  6. 智能互联网之数据存储实践
  7. 香蕉派开源硬件 Banana PI
  8. 潜在语义分析(TF-IDF、LSA)
  9. 微机实验报告6 并行接口实验
  10. 文本的平均列数python-CDA数据分析师
  11. linux调时区北京,Linux修改系统时间和中国时区
  12. 【基于Android的连连看游戏的设计与实现】
  13. X11 - X client数量达到上限并报错Maximum number of clients reachedxlsclients
  14. Linux:使用upower命令查看电池信息
  15. 利用jsdelivr+github使用免费又好用的全球节点CDN
  16. SQL修改表字段名称及结构
  17. [Git]git命令
  18. 微信开发.Net 接入示例
  19. 删除360卫士不能完全删除,发现360safe文件夹中softmgrext.dll无法删除,解决方法。
  20. PO,BO,VO,DTO和POJO

热门文章

  1. 独立院校中计算机专业,计算机专业最热门的“实力派”十大院校
  2. mysql 64位最新下载_mysql 64位官方版最新下载_mysql 64位官方版正式版 - 软件帝
  3. Linux命令行常用快捷键
  4. STM32国产替代者灵动微
  5. 使用DLL作为插件的设计框架
  6. RYU+Mininet的SDN架构-设计校园网络(五)
  7. 【技术干货】测试必须知道的精准测试
  8. CleanMyMac X2023Mac电脑性能加速软件
  9. sqlserver中rtrim函数跟ltrim函数的用法
  10. 第1144期AI100_机器学习日报(2017-11-05)