一、RESTful开发风格

1.R EST与RESTful

2.开发一个简单的RESTful应用

1.添加依赖pom.xml

    <dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.1.9.RELEASE</version></dependency></dependencies>

2.配置SpringMVC,applicationContext.xml,将后台请求的数据和JSON格式的数据都转换为UTF-8进行响应

<?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"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttps://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsd"><context:component-scan base-package="com.springmvc.restful"></context:component-scan>
<!--    开启注解模式--><mvc:annotation-driven>
<!--    开启静态转换器--><mvc:message-converters><bean class="org.springframework.http.converter.StringHttpMessageConverter"><property name="supportedMediaTypes"><list><value>text/html;charset=utf-8</value><value>application/json;charset=utf-8</value></list></property></bean></mvc:message-converters></mvc:annotation-driven>
<!--静态资源拦截器--><mvc:default-servlet-handler></mvc:default-servlet-handler>

3.添加过滤器,将所有请求转换为UTF-8字符集web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"version="3.1"><!--    DispatcherServlct--><servlet><servlet-name>springmvc</servlet-name><!--        DispatcherServlet是SpringMVC最核心对象DispatcherServlet用于拦截Http请求并根据请求的URL调用与之对应的Controller方法,来完成Http请求的处理--><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!--        applicationContext.xml--><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</param-value></init-param><!--        Web应用启动时自动创建Spring IOC容器并初始化DispatcherServlet--><load-on-startup>0</load-on-startup></servlet><servlet-mapping><servlet-name>springmvc</servlet-name><!--        /代表拦截所有请求--><url-pattern>/</url-pattern></servlet-mapping><!--对所有的请求进行过滤并将中文字符转为UTF-8编码--><filter><filter-name>characterFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param></filter><filter-mapping><filter-name>characterFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><filter>
<!--    使用非简单请求时需要添加该过滤器才能使PUT和DELETE请求支持数据传输--><filter-name>formContentFilter</filter-name><filter-class>org.springframework.web.filter.FormContentFilter</filter-class></filter><filter-mapping><filter-name>formContentFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>
</web-app>

3.新建client.html页面使用ajax请求

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>RESTful实验室</title><script src="jquery-3.5.1.min.js"></script><script>$(function(){$("#btnPost").click(function () {console.log("单机");$.ajax({url : "/restful/request/100",type : "post",data : "name=lily&age=23",dataType : "json",success : function (json) {$("#message").text(json.message+":"+json.id);}})})})</script>
</head>
<body>
<input type="button" id="btnGet" value="发送get请求">
<input type="button" id="btnPost" value="发送Post请求">
<input type="button" id="btnPut" value="发送Put请求">
<input type="button" id="btnDelete" value="发送Delete请求">
<h1 id="message"></h1></body>
</html>

4.新建处理的Controller类

package com.springmvc.restful;import com.springmvc.restful.entity.Person;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/restful")
public class RestfulController {@GetMapping("/request")
//    @ResponseBodypublic  String doGetRequest(){return "{\"message\":\"返回查询结果\"}";}//   POST /article/1
//    POST /restful/request/100@PostMapping("/request/{rid}")public String doPostRequest(@PathVariable("rid") Integer rid, Person person){System.out.println(person.getName()+":"+person.getAge());return "{\"message\":\"数据新建成功\",\"id\":"+rid+"}";}@PutMapping("/request")
//    @ResponseBodypublic String doPutRequest(Person person){System.out.println(person.getName()+":"+person.getAge());return "{\"message\":\"数据更新成功\"}";}@DeleteMapping("/request")
//    @ResponseBodypublic String doDeleteRequest(){return "{\"message\":\"数据删除成功\"}";}
}

需要注意的是@RestController注解相较于Controller能让我们无需在每个需要使用@ResponseBody的方法上使用该注解。简化开发。

使用put和delete请求进行前端数据请求时需要新增相应的过滤器web.xml有

3.简单请求与非简单请求

4.JSON序列化

1.添加依赖

<!--        添加jackson-core依赖--><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.9.9</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.9.9</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>2.9.9</version></dependency>

2.新增controller方法

//    在新增了jackson-core的注解和ResopnseBody注解后返回的对象会被jackson自动进行序列化输出
//    无需手动拼接json输出@GetMapping("/person")public Person findByPersonId(Integer id){Person person = new Person();if (id==1){person.setName("lily");person.setAge(23);}else if(id==2){person.setName("Andy");person.setAge(33);}return person;}

3.访问结果

4.如果返回是多个实体则需要将方法属性改为List<person>

    @GetMapping("/persons")public List<Person> findByPersons(){List list = new ArrayList();Person p1 =new Person();p1.setName("lily");p1.setAge(13);p1.setBirthday(new Date());Person p2 =new Person();p2.setName("andy");p2.setAge(23);p2.setBirthday(new Date());list.add(p1);list.add(p2);return list;}

修改HTML文件进行展示

        $(function(){$("#btnPersons").click(function(){$.ajax({url : "/restful/persons",type : "get",dataType :"json",success : function (json) {console.log(json)for(var i=0;i<json.length;i++){var p =json[i];$("#divPersons").append("<h2>"+p.name+"-"+p.age+"-"+p.birthday+"</h2>")}}})})})

有日期货币等属性时需要通过注解@JSONFormat进行格式化

    private  String name;private  Integer age;@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")private Date birthday;
后面为getter和setter

结果:

4.浏览器的同源策略

5.通过SpringMVC解决跨域访问问题

Spring MVC基础四相关推荐

  1. Java Web系列:Spring MVC基础

    1.Web MVC基础 MVC的本质是表现层模式,我们以视图模型为中心,将视图和控制器分离出来.就如同分层模式一样,我们以业务逻辑为中心,把表现层和数据访问层代码分离出来是一样的方法.框架只能在技术层 ...

  2. java地址映射关系,Spring MVC——基础(简介,使用,地址映射)

    "大佬们"嘴中的SSH,SSM框架,我这种小白终于解除到第二个S了,关于Spring MVC框架,根据最近的学习发现,还是有很多不足和需要加强巩固的地方,所以,通过总结博客的方式将 ...

  3. Spring MVC基础知识整理➣国际化和异常处理

    概述 Spring框架为WEB项目提供了国际化以及异常处理机制.所谓的国际化也就是不同国籍,显示不同国籍的语言与符号.异常处理,也就是能够捕获WEB项目下的所有异常信息,并能处理记录这些异常信息机制. ...

  4. Spring MVC 基础注解之@RequestMapping、@Controller、(二)

    我现在学的是spring4.2 今天主要学习了Spring MVC注解 引入注解可以减少我们的代码量,优化我们的代码. @Controller:用于标识是处理器类: @RequestMapping:请 ...

  5. Spring MVC 基础笔记

    spring mvc功能: 以Controller为中心完成对系统流程的控制管理 从请求中搜集数据 对传入的参数进行验证 将结果返回给视图 针对不同的视图提供不同的解决方案 针对jsp视图技术提供标签 ...

  6. Spring MVC 基础及相关概念(基础一)

    1.Spring MVC 架构以及流程介绍         1.1流程图 1.2 架构流程: 用户发送请求至前端控制器DispatcherServlet DispatcherServlet收到请求调用 ...

  7. SSM框架笔记13:Spring MVC基础

    vitalflux.com对2014-2015年度10佳Web框架排名, 没有Struts2的身影,前五名为: 1.Spring MVC 2.Grails 3.Play 4.Spring Boot

  8. Spring MVC 第四章:Form表单验证-JSR303和Spring框架验证以及国际化语言、Filter过滤器

    Form表单的验证验证,就是在提交表单的时候进行验证是否为空,是否满足特定条件才可以创建.常见的表单有前端验证和后端验证. 其中,前端验证有:HTML验证,JS验证,Jquery验证. 后端验证有:J ...

  9. Spring入门学习手册 6:Spring MVC基础中的基础

    目录 完整代码在这 一.获取请求参数 Spring获取请求参数非常简单,只要用到 @RequestParam 注解就可以了 如果不指定请求method的话,无论是get还是post参数都可以轻易获取到 ...

最新文章

  1. mongodb的shell命令
  2. 高通Vuforia优化目标检测与跟踪稳定性
  3. 解决SVN:E210007无法协商认证机制
  4. 【工具推荐】ADB IDEA
  5. abap java_ABAP,Java和JavaScript的序列化,反序列化
  6. 恒大紧急辟谣“资金链断裂”,股价止跌回升
  7. mysql数据生产数据分析_基于MySQL玩转SQL数据分析课程 互联网数据分析师-SQL数据分析实战视频教程...
  8. JAVA环境变量配置步骤及测试(JDK的下载、安装和环境配置教程)
  9. 过山车之星(Planet Coaster)的视角和编辑介绍
  10. CSS中 dispaly属性详解
  11. CPU的使用率和负载的区别
  12. iOS开发 - 关于微信分享后,提示“未验证应用”的解决办法,配置 Universal Link
  13. Windows平台下常见快捷指令
  14. [C语言]统计成绩问题:输入某班学生某门课的成绩(最多不超过40人,具体人数由用户键盘输入),用函数编程统计不及格人数。
  15. 深度学习中的对抗损失怎么使用
  16. 记录每天学习的新知识:AlarmManager 定时任务
  17. 《LCD总结篇(中级)》
  18. 制作VOC格式数据集的train.txt、val.txt文件
  19. python输出一个函数多项式_python实现PolynomialFeatures多项式的方法
  20. 看起来比较舒服的背景颜色值

热门文章

  1. Linux与Android安全差异
  2. 不同BMP位图与调色板分析
  3. 最全面的微信小程序渲染图片的方式
  4. 支原体最新研究进展(2022年3月)
  5. 《复杂》作者梅拉妮·米歇尔发文直指AI四大谬论,探究AI几度兴衰背后的根源...
  6. GSM MODEM的基本用法-收发短信篇
  7. cisco IOS,nexus和Arista 的vrrp
  8. EC-PCA: 利润中心段(Segment)维护流程
  9. SEO快排是什么?怎样实现快排?
  10. RuntimeError:a leaf Variable that requires grad has been used in an in-place