# 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接口测试

#### 二、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查找

2. 添加测试

3. 批量删除

#### 三、拦截器
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.