# ssm-test02 **Repository Path**: MarkPolaris/ssm-test02 ## Basic Information - **Project Name**: ssm-test02 - **Description**: restful风格 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2019-08-01 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #### 一、json数据交互 1. 添加json依赖 > springmvc默认使用MappingJscksonHttpMessageConverter对json数据进行转换 pom.xml ```xml com.fasterxml.jackson.core jackson-core 2.9.8 com.fasterxml.jackson.core jackson-databind 2.9.8 ``` > jackson控制类 ```java @PostMapping("/json") public User getJson(@RequestBody User user){ log.info("-------"+user); return user; } ``` > postman接口测试 ![5d42cbbec0cc390387](https://i.loli.net/2019/08/01/5d42cbbec0cc390387.png) #### 二、Restful风格 > UserController.java ```java package com.neuedu.controller; import com.alibaba.fastjson.JSON; import com.neuedu.entity.User; import com.neuedu.service.UserService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.Date; import java.util.List; /** * @Author: MARK * @Date: 2019/7/29 19:14 * @version: 1.0.0 * @Description: Restful风格 */ @RestController @Slf4j @RequestMapping(value = "/user" ,produces = "application/json; charset=utf-8") public class UserController { @Autowired private UserService userService; /** * @return java.lang.String * @create: 2019/8/1 * @author MARK * @Description: 添加方法 */ @PostMapping public String addUser(@RequestBody User user){ log.info(user.getUsername()); return "ok"; } @PutMapping public String update(@RequestBody User user){ log.info(user.getId().toString()); log.info(user.getUsername()); return "ok"; } /** * @return java.util.List * @create: 2019/8/1 * @author MARK * @Description: 查询所有 */ @GetMapping public List select(){ List list = userService.getAll(); log.info(""); return list; } /** * @return com.neuedu.entity.User * @create: 2019/8/1 * @author MARK * @Description: 根据id查找 */ @GetMapping("{id}") public User getById(@PathVariable("id") int id){ User user = new User(); user.setId(id); user.setUsername("sss"); user.setBirth(new Date()); user.setPassword(123); return user; } @DeleteMapping("{id}") public String deleteById(@PathVariable("id") int id){ return "ok"; } @DeleteMapping("{ids}") public String bath(@RequestBody List ids){ // sql用in关键字批量删除 log.info(JSON.toJSONString(ids)); return "ok"; } } ``` > postman接口测试 1. 根据id查找 ![5d437e499d6a989845](https://i.loli.net/2019/08/02/5d437e499d6a989845.png) 2. 添加测试 ![5d42e446df31044205](https://i.loli.net/2019/08/01/5d42e446df31044205.png) 3. 批量删除 ![5d437db5ab9b261260](https://i.loli.net/2019/08/02/5d437db5ab9b261260.png) #### 三、拦截器 1. 拦截器实现类 ```java package com.neuedu.interceptor; import lombok.extern.slf4j.Slf4j; import org.springframework.lang.Nullable; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * @Author: MARK * @Date: 2019/8/2 08:09 * @Version: 1.0.0 * @Description: 拦截器 */ @Slf4j public class LogInterceptor implements HandlerInterceptor { /** * @return boolean * @create: 2019/8/2 * @author MARK * @Description: controller执行前调用此方法 * 返回true继续执行 * 这里可以加入登录校验,权限拦截等 */ public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { log.info("preHandle"); return true; } /** * @return void * @create: 2019/8/2 * @author MARK * @Description: controller执行后但未返回视图前调用此方法 */ public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception { log.info("postHandle"); } /** * @return void * @create: 2019/8/2 * @author MARK * @Description: controller执行后且视图返回后调用此方法 */ public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception { log.info("afterHandle"); } } ``` 2. 配置全局拦截器 ```xml ``` 3. postman随便测个接口 4. 日志输出 ```textile [DEBUG] 2019-08-02 08:19:02,586 method:org.springframework.core.log.LogFormatUtils.traceDebug(LogFormatUtils.java:90) GET "/user/1", parameters={} [DEBUG] 2019-08-02 08:19:02,605 method:org.springframework.web.servlet.handler.AbstractHandlerMapping.getHandler(AbstractHandlerMapping.java:420) Mapped to public com.neuedu.entity.User com.neuedu.controller.UserController.getById(int) [INFO ] 2019-08-02 08:19:02,609 method:com.neuedu.interceptor.LogInterceptor.preHandle(LogInterceptor.java:28) preHandle [DEBUG] 2019-08-02 08:19:02,677 method:org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:268) Using 'application/json;charset=utf-8', given [*/*] and supported [application/json;charset=utf-8] [DEBUG] 2019-08-02 08:19:02,783 method:org.springframework.core.log.LogFormatUtils.traceDebug(LogFormatUtils.java:90) Writing [User(id=1, username=sss, password=123, birth=Fri Aug 02 08:19:02 CST 2019)] [INFO ] 2019-08-02 08:19:02,833 method:com.neuedu.interceptor.LogInterceptor.postHandle(LogInterceptor.java:39) postHandle [INFO ] 2019-08-02 08:19:02,834 method:com.neuedu.interceptor.LogInterceptor.afterCompletion(LogInterceptor.java:49) afterHandle [DEBUG] 2019-08-02 08:19:02,835 method:org.springframework.web.servlet.FrameworkServlet.logResult(FrameworkServlet.java:1130) Completed 200 OK ``` 5. 拦截器获取访问信息 修改preHandle ```java public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // String remoteAddress = request.getHeader("Remote Address"); //请求方式 String RequestMethod = request.getMethod(); //user-agent String userAgent = request.getHeader("User-Agent"); //Referer String referer = request.getHeader("Referer"); //ip String realIp = getIpAddress(request); //ip String host = request.getRemoteHost(); //port int port = request.getRemotePort(); //协议 String scheme = request.getScheme(); // log.info("------remoteAddress: " + remoteAddress); log.info( "------拦截器拦截信息------\n" + "------RequestMethod: " + RequestMethod + "\n" + "------userAgent: " + userAgent + "\n" + "------referer: " + referer + "\n" + "------realIp: " + realIp + "\n" + "------host: " + host + "\n" + "------port: " + port + "\n" + "------scheme: " + scheme + "\n" + "------getSession: " + request.getSession() + "\n" + "------RequestMethod: " + RequestMethod + "\n" ); return true; } ``` 6. postman发送个请求 7. 日志输出 ```textile [INFO ] 2019-08-02 10:23:55,971 method:com.neuedu.interceptor.LogInterceptor.preHandle(LogInterceptor.java:46) ------拦截器拦截信息------ ------RequestMethod: GET ------userAgent: PostmanRuntime/7.15.2 ------referer: null ------realIp: 0:0:0:0:0:0:0:1 ------host: 0:0:0:0:0:0:0:1 ------port: 5693 ------scheme: http ------getSession: org.apache.catalina.session.StandardSessionFacade@2b25db57 ------RequestMethod: GET ``` > fix: 修改了几个实现方法 1. 日期类处理,不需要配置 可以直接实现日期处理 ```java @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:SS") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:SS") private Date birth; ``` 2.