下面是我的学习笔记 这是我跟着B站的一位UP主学习的笔记,方便自己以后复习。
文章目录
Spring MVC 的自定义转换器
converter
ConverterHandler.java
package com.southwind.controller.controller;
import com.southwind.controller.userValue.Student;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Date;
//业务方法 自定义转换器
@RestController
@RequestMapping("/converter")
public class ConverterHandler {
// String 转 Date
@RequestMapping("/date")
public String date(Date date) {
return date.toString();
}
// String 转 Student
@RequestMapping("/student")
public String student(Student student) {
return student.toString();
}
}
DateConverter.java
package com.southwind.controller.converter;
import org.springframework.core.convert.converter.Converter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
//这就是转换器
//springmvc.xml中配制
public class DateConverter implements Converter<String, Date> {
//客户端输入String 类型的数据“2019-03-03”,自定义转换器将该数据转换为Date类型的对象
// public Object convert(Object o) {
// 需要把它变成 public Date convert(String o)
// return null;
// }
private String pattern;
public DateConverter(String pattern) {
this.pattern = pattern;
}
@Override
public Date convert(String s) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(this.pattern);
Date date = null;
try {
date = simpleDateFormat.parse(s);
// parse 解析的意思
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
}
StudentConnverter.java
package com.southwind.controller.converter;
import com.southwind.controller.userValue.Student;
import org.springframework.core.convert.converter.Converter;
// Student 转换器
public class StudentConverter implements Converter<String, Student> {
@Override
public Student convert(String s) {
String[] args = s.split("-");
Student student = new Student();
student.setId(Long.parseLong(args[0]));
student.setName(args[1]);
student.setAge(Integer.parseInt(args[2]));
return student;
}
}
springmvc.xml 添加配制
<!-- 配制自定义转换器-->
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<list>
<!-- 配制一个 Date 的转换器-->
<bean class="com.southwind.controller.converter.DateConverter">
<constructor-arg type="java.lang.String" value="yyyy-MM-dd"></constructor-arg>
</bean>
<!-- 配制一个 Student 的转换器-->
<bean class="com.southwind.controller.converter.StudentConverter">
</bean>
</list>
</property>
</bean>
<!--解决传入的参数是列表 中文乱码问题-->
<!-- 注册自定义转化器-->
<mvc:annotation-driven conversion-service="conversionService">
<!-- 消息转换器-->
<mvc:message-converters register-defaults="true">
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes" value="text/html;charset=UTF-8">
</property>
</bean>
<!--配制fastjson-->
<bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter4"></bean>
</mvc:message-converters>
</mvc:annotation-driven>
addDate.jsp
<%--
Created by IntelliJ IDEA.
User: 老白
Date: 2020/5/16
Time: 12:36
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="/converter/date" method="post">
日期:<input type="text" name="date"/>(yyyy-MM-dd)
<br>
<input type="submit" value="发送"/>
</form>
</body>
</html>
addStudent.jsp
<%--
Created by IntelliJ IDEA.
User: 老白
Date: 2020/5/16
Time: 12:36
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="/converter/date" method="post">
日期:<input type="text" name="date"/>(yyyy-MM-dd)
<br>
<input type="submit" value="发送"/>
</form>
</body>
</html>
Student.java
package com.southwind.controller.userValue;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
// 带参构造 无参构造
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {
private long id;
private String name;
private int age;
}
RESTful 架构
Handeler
RESTHandeler.java
package com.southwind.controller.controller;
//RESTful 架构
// GET 获取资源
// POST 新建资源
// DELETE 删除资源
// PUT 修改资源
import com.southwind.controller.repository.StudentRepository;
import com.southwind.controller.userValue.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Collection;
@RestController
@RequestMapping("/rest")
public class RESTHandeler {
@Autowired
private StudentRepository studentRepository;
//http://localhost:8088/rest/findAll
@GetMapping("/findAll")
public Collection<Student> findAll(HttpServletResponse response) {
// 解决中文乱码问题
response.setContentType("text/json;charset=UTF-8");
return studentRepository.findAll();
}
//http://localhost:8088/rest/findById/2
@GetMapping("/findById/{id}")
public Student findById(@PathVariable("id") Long id) {
return studentRepository.findByID(id);
}
@PostMapping("/save")
public void save(@RequestBody Student student) {
studentRepository.saveOrUpdate(student);
}
@PutMapping("/Update")
public void update(@RequestBody Student student) {
studentRepository.saveOrUpdate(student);
}
@DeleteMapping("/delete/{id}")
public void delete(@PathVariable("id") Long id) {
studentRepository.delete(id);
}
}
repository
StudentRepository 接口
package com.southwind.controller.repository;
import com.southwind.controller.userValue.Student;
import java.util.Collection;
public interface StudentRepository {
public Collection<Student> findAll();
public Student findByID(Long id);
public void saveOrUpdate(Student student);
public void delete(Long id);
}
repositoy.imp 包
StudentRopositoryImpl.java
package com.southwind.controller.repository.impl;
import com.southwind.controller.repository.StudentRepository;
import com.southwind.controller.userValue.Student;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Repository;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
//需要把它注入 Handeler里面 交给IOC
@Repository
public class StudentRopositoryImpl implements StudentRepository {
// 定义一个Map 用来模拟数据库
private static Map<Long, Student> studentMap;
// 静态方法
// static{}(即static块),会在类被加载的时候执行且仅会被执行一次,一般用来初始化静态变量和调用静态方法
static {
studentMap = new HashMap<>();
studentMap.put(1L, new Student(1L, "oldbai", 22));
studentMap.put(2L, new Student(2L, "old", 21));
studentMap.put(3L, new Student(3L, "bai", 20));
studentMap.put(4L, new Student(4L, "huihui", 19));
}
@Override
public Collection<Student> findAll() {
return studentMap.values();
}
@Override
public Student findByID(Long id) {
return studentMap.get(id);
}
@Override
public void saveOrUpdate(Student student) {
studentMap.put(student.getId(), student);
}
@Override
public void delete(Long id) {
studentMap.remove(id);
}
}