Spring Boot 简单的请求示例(包括请求体验证)
1.先做个最简单的Get请求
新建一个Controller , 并给他添加注解@RestController 它是@Controller和@ResponseBody的组合注解,告诉Spring我是一个Controller,请求过来的时候,记得扫描我
ok,在给他添加@RequestMapping注解,为这个Controler指明路径
@RestController
@RequestMapping("/Demo")
public class DemoController { @ResponseBody
@RequestMapping(value = "/sayHello",method = RequestMethod.GET)
public Map<String,Object> sayHello(){
Map<String,Object> res = new HashMap<String,Object>();
res.put("message", "hello world");
return res;
}
}
写个Get方法,返回一个Map
右击启动类 run...

2.POST请求的方法
正常在接口请求过程中,中间会有个过滤器,过滤所有请求的内容,同时做一些安全方面的校验
过滤器注册类
@Configuration
public class WebConfig { @Bean
@SuppressWarnings({ "unchecked", "rawtypes" })
public FilterRegistrationBean someFilterRegistration1() {
//新建过滤器注册类
FilterRegistrationBean registration = new FilterRegistrationBean();
//添加出事话过滤器
registration.setFilter( new CustomFilter());
// 设置过滤器的URL模式
registration.addUrlPatterns("/*");
return registration;
} }
@Configuration自动配置,由Spring管理
过滤器注册类中,添加过滤器CustomFilter
过滤器的URL模式设置为过滤所有请求
/**
* 初始化过滤器
* @ClassName: CustomFilter
* @author Mr.Chengjq
* @date 2018年10月16日
* @Description: TODO
*/
@WebFilter(filterName = "sessionFilter",urlPatterns = {"/*"})
public class CustomFilter implements Filter { private GeneralConfiguration generalConfiguration; @Override
public void destroy() {
// TODO Auto-generated method stub } @SuppressWarnings("unused")
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
throws IOException, ServletException {
// TODO Auto-generated method stub
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
HttpSession session = request.getSession(false);
String uri = request.getRequestURI();
//是否需要过滤
if(!isNeedFilter(uri)){
filterChain.doFilter(request, response);
return;
}
MutableHttpServletRequest requestWrapper = null;
if(request instanceof HttpServletRequest) {
requestWrapper = new MutableHttpServletRequest((HttpServletRequest) request);
}
String body = getRequestbody(requestWrapper);
//验证 start
//验证方式 1.token验证(头部加 token:xxx) 2.秘钥验证(暂定MD5验证 参数 timestamp:xxx key:MD5(xxx+orange))
if(requestWrapper.getHeader("valdateType").equals("1")){
String token = requestWrapper.getHeader("token");
System.out.println("token = "+token);
}else if(requestWrapper.getHeader("valdateType").equals("2")){
String timestamp = requestWrapper.getHeader("timestamp");
String key = requestWrapper.getHeader("key");
//验证
}else{
//返回验证方式失败信息
throw new BaseException("验证失败");
}
//end
requestWrapper.putHeader("userId", "1111");
if(requestWrapper == null) {
filterChain.doFilter(request, response);
} else {
filterChain.doFilter(requestWrapper, response);
} } private String getRequestbody(HttpServletRequest request) {
String param= null;
try {
BufferedReader streamReader = new BufferedReader( new InputStreamReader(request.getInputStream(), "UTF-8"));
StringBuilder responseStrBuilder = new StringBuilder();
String inputStr;
while ((inputStr = streamReader.readLine()) != null)
responseStrBuilder.append(inputStr); JSONObject jsonObject = JSONObject.parseObject(responseStrBuilder.toString());
param= jsonObject.toJSONString();
} catch (Exception e) {
e.printStackTrace();
}
return param;
} public boolean isNeedFilter(String uri) {
boolean res = true;
String url = generalConfiguration.getUrl();
String[] list = url.split(",");
for(int i = 0 ; i<list.length;i++){
if(uri.indexOf(list[i])!=-1){
res = false;
break;
}
}
return res;
} private class MutableHttpServletRequest extends HttpServletRequestWrapper { private final Map<String, String> customHeaders;
private byte[] body; public MutableHttpServletRequest(HttpServletRequest request) {
super(request);
this.customHeaders = new HashMap<String, String>();
body = getRequestbody(request).getBytes(Charset.forName("UTF-8"));
} public void putHeader(String name, String value) {
this.customHeaders.put(name, value);
} @Override
public String getHeader(String name) {
// check the custom headers first
String headerValue = customHeaders.get(name); if (headerValue != null) {
return headerValue;
}
// else return from into the original wrapped object
return ((HttpServletRequest) getRequest()).getHeader(name); } @Override
public Enumeration<String> getHeaders(String name) { if (customHeaders.containsKey(name)) {
return new Enumeration<String>() {
boolean hasNext = true; @Override
public boolean hasMoreElements() {
return hasNext;
} @Override
public String nextElement() {
hasNext = false;
return customHeaders.get(name);
}
};
}
return super.getHeaders(name);
} @Override
public Enumeration<String> getHeaderNames() {
// create a set of the custom header names
Set<String> set = new HashSet<String>(customHeaders.keySet()); // now add the headers from the wrapped request object
Enumeration<String> e = ((HttpServletRequest) getRequest()).getHeaderNames();
while (e.hasMoreElements()) {
// add the names of the request headers into the list
String n = e.nextElement();
set.add(n);
} // create an enumeration from the set and return
return Collections.enumeration(set);
} @Override
public BufferedReader getReader() throws IOException {
return new BufferedReader(new InputStreamReader(getInputStream()));
} @Override
public ServletInputStream getInputStream() throws IOException {
final ByteArrayInputStream bais = new ByteArrayInputStream(body);
return new ServletInputStream() { @Override
public int read() throws IOException {
return bais.read();
} @Override
public boolean isFinished() {
// TODO Auto-generated method stub
return false;
} @Override
public boolean isReady() {
// TODO Auto-generated method stub
return false;
} @Override
public void setReadListener(ReadListener readListener) {
// TODO Auto-generated method stub }
};
} } @Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
//初始化bean 获取公共参数配置
ServletContext servletContext = arg0.getServletContext();
ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(servletContext);
generalConfiguration = (GeneralConfiguration) ctx.getBean("generalConfiguration");
}
在doFilter方法里具体写过滤的内容以及验证
isNeedFilter方法确认是否要过滤,如果不需要过滤,配置文件里配置不需要过滤的请求名,
/**
* 公共参数配置类
* @ClassName: GeneralConfiguration
* @author Mr.Chengjq
* @date 2018年10月16日
* @Description: TODO
*/
@PropertySource("classpath:conf/generalConfiguration.properties")
@ConfigurationProperties(prefix = "general")
@Configuration
public class GeneralConfiguration { //请求地址
private String url; public String getUrl() {
return url;
} public void setUrl(String url) {
this.url = url;
} }
这里添加参数配置类,获取generalConfiguration.properties配置文件,以general开头,当然还可以以@Value的方式
这里就不需要过滤了,直接在配置文件写明不需要处理下面请求的地址,直接进入Controlle方法
general.url = /sayHello,/sayHello2
sayHello2 方法如下,请求数据库的信息
@ResponseBody
@RequestMapping(value = "/sayHello2",method = RequestMethod.POST)
public ResponseMsg sayHello2(@RequestHeader("userId") String userId,@RequestBody RequestMsg requestMsg){
System.out.println(userId);
JSONObject jsonobject = JSONObject.fromObject(requestMsg.getRoot());
System.out.println("jsonobject = "+jsonobject);
//Map<String,Object> res = new HashMap<String,Object>();
PageResult<UserBaseDTO> res = null;
List<UserBaseDTO> list = null;
UserBaseDTO ubt = new UserBaseDTO();
try {
StringBuffer logOut = new StringBuffer();
logOut.append("\n");
logOut.append("cjq2测试");
logOut.append("\n"); LOGGER.debug(logOut.toString());
Pagination page = new Pagination();
page.setPage(1);
page.setRows(10);;
res = iUserbaseService.pageUserBase(ubt, page);
list = res.getList(); } catch (Exception e) {
// TODO: handle exception
throw new BaseException("数据错误");
//LOGGER.error(e.getMessage());
}
return new ResponseMsg(requestMsg.getRoute(), GeneralConstant.SUCCESS, "查询成功", res);
}
在正常开发过程中,对请求参数提和返回参数体会有统一的格式和加密方式,例如上面的的RequestMsg和ResponseMsg
ok 这样就完成了简单的GET和POST请求
Spring Boot 简单的请求示例(包括请求体验证)的更多相关文章
- Spring Boot全局支持CORS(跨源请求)
		
import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet. ...
 - 玩转spring boot——简单登录认证
		
前言 在一个web项目中,某些页面是可以匿名访问的,但有些页面则不能.spring mvc提供了HandlerInterceptor接口来应对,只需要重写preHandle方法便可以实现此功能.那么使 ...
 - Spring Boot Ftp Client 客户端示例支持断点续传
		
本章介绍 Spring Boot 整合 Ftpclient 的示例,支持断点续传 本项目源码下载 1 新建 Spring Boot Maven 示例工程项目 注意:是用来 IDEA 开发工具 File ...
 - Spring Boot实现一个监听用户请求的拦截器
		
项目中需要监听用户具体的请求操作,便通过一个拦截器来监听,并继续相应的日志记录 项目构建与Spring Boot,Spring Boot实现一个拦截器很容易. Spring Boot的核心启动类继承W ...
 - Spring Boot使用AOP在控制台打印请求、响应信息
		
AOP称为面向切面编程,在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等. AOP简介 AOP全称Aspect Oriented Programming,面向切面,AOP主要实现的 ...
 - spring Boot使用AOP统一处理Web请求日志记录
		
1.使用spring boot实现一个拦截器 1.引入依赖: <dependency> <groupId>org.springframework.boot</grou ...
 - spring boot使用AOP统一处理web请求
		
为了保证服务的高可用,及时发现问题,迅速解决问题,为应用添加log是必不可少的. 但是随着项目的增大,方法增多,每个方法加单独加日志处理会有很多冗余 那在SpringBoot项目中如何统一的处理Web ...
 - Spring Boot 2.x 综合示例-整合thymeleaf、mybatis、shiro、logging、cache开发一个文章发布管理系统
		
一.概述 经过HelloWorld示例(Spring Boot 2.x 快速入门(上)HelloWorld示例)( Spring Boot 2.x 快速入门(下)HelloWorld示例详解)两篇的学 ...
 - RabbitMQ(三):RabbitMQ与Spring Boot简单整合
		
RabbitMQ是目前非常热门的一款消息中间件,不管是互联网大厂还是中小企业都在大量使用.Spring Boot的兴起,极大地简化了Spring的开发,本文将使用Spring Boot与RabbitM ...
 
随机推荐
- springboot ssl  http转Https
			
参考:https://www.cnblogs.com/imfjj/p/9058443.html (里面有坑) https://blog.csdn.net/l4642247/article/deta ...
 - 获取ASPxGridView 中的数据(仅仅是获取;注意模板是如何获取的)
			
1.取得控件值 using System.Collections.Generic; //取得当前控件值的集合 直接寻找控件的ID List<object> keyValues = this ...
 - Nginx bind() to 0.0.0.0:8000 failed (10013: 错误解决
			
本人配置Nginx 8000端口, 启动Nginx 失败, 查看日志logs/error.log出现如下提示 结束酷狗进程就Ok叻
 - ABAP-索引
			
转载:http://blog.sina.com.cn/s/blog_498610450101kbxl.html tables: csks. start-of-selection. select * u ...
 - UI5-文档-4.21-Data Types
			
发票清单已经很好看了,但是没有指定价格的发票是什么?通常价格以技术格式存储,并带有'.数据模型中的分隔符.例如,我们的菠萝发票上的计算价格是87.2,没有货币.我们将使用SAPUI5数据类型正确地格式 ...
 - Kotlin语言学习笔记(5)
			
委托模式(Delegation) 类的委托 interface Base { fun print() } class BaseImpl(val x: Int) : Base { override fu ...
 - XML文件的写,集合XML序列化(写)。XML文件的读,递归遍历
			
XML文件:必须要有一个节点.检验xml文件,可以用浏览器打开,能打开表示对,否则错. 处理方法: DOM:XmlDocument文档对象模型 Sax(事件驱动,XmlReader) XmlSeria ...
 - oracle表属性
			
1. PCTFREE 要形容一个 BLOCK 的运作,我们可以把一个 BLOCK 想成一个水杯.侍者把水倒入放在我们面前的水杯,要多满呢,我们要求他倒 9 分满好了,这时候 PCTFREE 代表着设定 ...
 - a标签伪类的LOVE HATE原则
			
a标签伪类的LOVE HATE原则 a标签有四个伪类,分别是: a:link 未访问的链接 a:visited 已访问的链接 a:hover 鼠标移动到链接上 a:active 选定的链接 遇到的问题 ...
 - js获取地址栏信息
			
参考: http://www.w3school.com.cn/jsref/dom_obj_location.asp http://www.xxx.com:8081/ location.host = w ...