• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

spring-mvc和amp;RestFul风格

武飞扬头像
大米☋
帮助1

SpringMVC基本原理

Spring MVC属于Java Web框架,既然是MVC设计模式的实现,自然侧重点是在C(控制器)上,成功实践的MVC框架,基本上都不对M(模型)进行过多约束。在Java Web技术中,最适合胜任控制器角色的当属Servlet。Spring MVC的控制器正是由DispatcherServlet这个Servlet组件充当,当请求到达DispatcherServlet后,从宏观角度来看,会经历以下一些处理步骤:

学新通

  • 第一步:用户发起请求到前端控制器(DispatcherServlet)。
  • 第二步:前端控制器请求处理器映射器(HandlerMappering)去查找处理器(Handle):通过xml配置或者注解进行查找。
  • 第三步:找到以后处理器映射器(HandlerMappering)像前端控制器返回执行链(HandlerExecutionChain)。
  • 第四步:前端控制器(DispatcherServlet)调用处理器适配器(HandlerAdapter)去执行处理器(Handler)。
  • 第五步:处理器适配器去执行Handler。
  • 第六步:Handler执行完给处理器适配器返回ModelAndView。
  • 第七步:处理器适配器向前端控制器返回ModelAndView。
  • 第八步:前端控制器请求视图解析器(ViewResolver)去进行视图解析。
  • 第九步:视图解析器像前端控制器返回View。 第十步:前端控制器对视图进行渲染。
  • 第十一步:前端控制器向用户响应结果。

看到这些步骤我相信大家很感觉非常的乱,这是正常的,但是这里主要是要大家理解SpringMVC中的几个组件:

  • 前端控制器(DispatcherServlet):接收请求,响应结果,相当于电脑的CPU。
  • 处理器映射器(HandlerMapping):根据URL去查找处理器。
  • 处理器(Handler):(需要程序员去写代码处理逻辑的)。
  • 处理器适配器(HandlerAdapter):会把处理器包装成适配器,这样就可以支持多种类型的处理器,类比笔记本的适配器(适配器模式的应用)。
  • 视图解析器(ViewResovler):进行视图解析,多返回的字符串,进行处理,可以解析成对应的页面。

1、创建web项目并勾选自动创建web.xml文件

2、导入jar包

学新通

3、 创建com.ysd.entity包,并在其中创建User实体类。

package com.ysd.entity; 
public class User {  
  private String name;  
  private String sex;  
  private Integer age;  
  
  //省略get、set、带参和无参构造方法、toString方法 
} 

4、 在src下创建spring-mvc.xml配置文件,并添加如下代码。

<?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:mvc="http://www.springframework.org/schema/mvc"  
	xmlns:p="http://www.springframework.org/schema/p"  
	xmlns:context="http://www.springframework.org/schema/context"  
	xmlns:aop="http://www.springframework.org/schema/aop"  
	xsi:schemaLocation="http://www.springframework.org/schema/beans  
	http://www.springframework.org/schema/beans/spring-beans-4.3.xsd  
	http://www.springframework.org/schema/context  
	http://www.springframework.org/schema/context/spring-context-4.3.xsd  
	http://www.springframework.org/schema/mvc  
	http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd  
	http://www.springframework.org/schema/aop  
	http://www.springframework.org/schema/aop/spring-aop-4.3.xsd">  
</beans> 
学新通

5、在WEB-INF下的web.xml中配置前端控制器。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>springmvc01</display-name>
  
  <!-- 配置前端控制器(DispatcherServlet):这是springmvc的核心:请求分发器, -->  
  <servlet>  
	  <servlet-name>springmvc</servlet-name>  
	  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
	  <!-- DispatcherServlet要绑定spring的配置文件 -->  
	  <init-param>  
		  <param-name>contextConfigLocation</param-name>  
		  <param-value>classpath:springmvc.xml</param-value>  
	  </init-param>  
	  <!-- 启动级别:1 -->
	  <load-on-startup>1</load-on-startup>
  </servlet>   
  
  <!-- 
  在springmvc中,/	/*
  /:只匹配所有的请求,不会去匹配jsp页面
  /*:匹配所有的请求,包括jsp页面
   -->
  <servlet-mapping>
	  <servlet-name>springmvc</servlet-name>  
	  <url-pattern>/</url-pattern>  
  </servlet-mapping>
  
</web-app>
学新通
  • 初始化参数标签中参数名为contextConfigLocation,值为classpath:springmvc.xml,意为加载springmvc的配置文件,注意配置文件的名称不能写错。

  • 标签中的标签的“/”,表示该项目下的所有请求全部交由前端控制器进行接收。

6、在springmvc.xml中配置处理器适配器(HandlerAdapter)、处理器映射器(HandlerMapping)、视图解析器(ViewResolver)。

<!-- 处理器适配器:HandlerAdapter --> 
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />  

<!-- 处理器映射器:HandlerMapping --> 
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>  

<!-- 视图解析器:ViewResolver --> 
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
  <!-- 前缀 -->  
  <property name="prefix" value="/WEB-INF/"></property>  
  <!-- 后缀 -->  
  <property name="suffix" value=".jsp"></property> 
</bean>
  • 处理器适配器:我们使用了SimpleControllerHandlerAdapter,翻译过来就是简单的控制器处理器适配器,它支持所有实现了 Controller 接口的 Handler 控制器,如果开发中编写了实现 Controller 接口的控制器,则 SimpleControllerHandlerAdapter 适配器就会去执行。
  • 处理器映射器:BeanNameUrlHandlerMapping,这个类的映射规则是将 bean 的 name 作为 url 进行查找,需要在配置 Handler 时指定 beanname。
  • InternalResourceView会把Controller处理器方法返回的模型属性都存放到对应的request属性中,然后通过RequestDispatcher在服务器端把请求forword重定向到目标URL。视图解析器的前缀和后缀可以减少Controller中编写的代码。

7、编写处理器(Controller)

package com.tcc.contorller;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

import com.tcc.entity.User;

public class UserController implements Controller {

	@Override
	public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {
		//ModelAndView中包含了模型和视图信息 
		ModelAndView mv = new ModelAndView();
		
		//此处应该调用service业务层的查询方法,因为本案例没有使用MyBatis,所以我们使用静态数据 
		List<User> userList = new ArrayList<User>();  
		userList.add(new User("张三", "男", 18));  
		userList.add(new User("李四", "女", 16));  
		userList.add(new User("王五", "未知", 20));
		
		//相当于request的setAttribute方法,可以在JSP中获取 (1
		mv.addObject("userList", userList);
		
		//设置视图路径  
		//如果视图解析器中没有配置前缀和后缀,此处应该写为:/WEB-INF/userList.jsp (2
		mv.setViewName("userList");
		
		//返回modelAndView 
		return mv;
	}

}
学新通
  • Controller中编写着我们的核心业务代码,该类需要实现Controller接口。①处当于request的setAttribute方法,可以在JSP中通过EL表达式或者小脚本获取。
  • 在第6步的视图解析器中配置了前缀和后缀,所以②处代码可以省略“/WEB-INF/”和“.jsp”,如果视图解析器中没有配置,应该写为“/WEB-INF/userList.jsp”

8、 将上一步的UserController配置为Bean。

<bean name="/user" class="com.tcc.controller.UserController"/> 
  • 该Bean中class属性为UserController类的全限定名,name属性为访问该类的路径,注意“/”必须保留,否则不能正常访问。

9、编写视图(JSP),在WEB-INF下创建userList.jsp,视图名称与路径应与第7步中的setViewName()中的值保持一致。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <!-- (1) -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>

<style type="text/css">  
	td,th { border: 1px solid #ccc }  
	table { border-collapse: collapse; } 
</style>

</head>
<body>

	<table>  
		<tr>  
			<th>姓名</th>  
			<th>性别</th>  
			<th>年龄</th>  
		</tr>  
		<c:forEach items="${userList}" var="user"> <!-- (2)  -->
			<tr>  
				<td>${user.name}</td>  
				<td>${user.sex}</td>  
				<td>${user.age}</td>  
			</tr>  
		</c:forEach>  
	</table>

</body>
</html>
学新通
  • JSP中①处使用了jstl标签。②处使用了EL表达式,其中填写的“userList”应与第7步中addObject()方法的键保持一致。

10、项目结构如下:

学新通

11、 将项目部署至Tomcat 8中。

12、打开浏览器访问:http://localhost:8080/springmvc1/user

路径分析:

  • localhost代表本机地址;
  • 8080代表端口号;
  • springmvc1代表项目名;
  • user代表第8步中bean中“name”属性的值。

测试结果:

学新通

SpringMVC注解开发

步骤:

1、新建Web项目springmvc2。

2、添加相应的jar包,注意要添加webmvc和jstl。

3、 创建com.ysd.entity包,并在其中创建User实体类。

4、 在src下创建springmvc.xml配置文件,并添加如下代码。

5、在WEB-INF下的web.xml中配置前端控制器

6、在springmvc.xml中配置开启注解、视图解析器(ViewResolver)。

<?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:mvc="http://www.springframework.org/schema/mvc"  
	xmlns:p="http://www.springframework.org/schema/p"  
	xmlns:context="http://www.springframework.org/schema/context"  
	xmlns:aop="http://www.springframework.org/schema/aop"  
	xsi:schemaLocation="http://www.springframework.org/schema/beans  
	http://www.springframework.org/schema/beans/spring-beans-4.3.xsd  
	http://www.springframework.org/schema/context  
	http://www.springframework.org/schema/context/spring-context-4.3.xsd  
	http://www.springframework.org/schema/mvc  
	http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd  
	http://www.springframework.org/schema/aop  
	http://www.springframework.org/schema/aop/spring-aop-4.3.xsd">  
	
	
	<!-- 自动扫描包,让指定包下的注解生效,由IOC容器统一管理 --> 
	<context:component-scan base-package="com.tcc"/> 
	
	<!-- 让mvc不处理静态资源	.css .js .html .mp3 .mp4 --> 
	<mvc:default-servlet-handler/> 
	
	<!-- 
	支持mvc注解驱动
		在spring中一般采用@RequestMapping注解来完成映射关系
		想要使用@RequestMapping注解生效
		必须向上下文中注册DefaultAnnotationHandlerMapping
		和一个AnnotationMethodHandlerAdapter实例
		这两个实例分别在类级别和方法级别处理。
		而annotation-driven配置帮助我们自动完成上述两个实例
	 -->
	<mvc:annotation-driven/>
	
	<!-- 视图解析器:ViewResolver --> 
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
		<!-- 前缀 -->  
		<property name="prefix" value="/WEB-INF/"></property>  
		<!-- 后缀 -->  
		<property name="suffix" value=".jsp"></property> 
	</bean>
	
	
</beans> 
学新通
  • <context:component-scan base-package=“com.ysd” />意为开启注解扫描,开启之后可以使用Spring的注解进行配置Bean。
  • mvc:annotation-driven/意为开启SpringMVC注解,当配置了mvc:annotation-driven/后,Spring就知道了我们启用注解驱动。然后Spring通过<context:component-scan />标签的配置,会自动为我们将扫描到的@Component,@Controller,@Service,@Repository等注解标记的组件注册到工厂中,来处理我们的请求。

7、编写Controller

package com.tcc.controller;

import java.util.ArrayList;
import java.util.List;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import com.tcc.entity.User;

@Controller
public class UserController {
	
	@RequestMapping("/getUsers")	//(1)
	public ModelAndView getUsers(){	//(2)
		
		ModelAndView mv = new ModelAndView();
		
		//此处应该调用service业务层的查询方法,因为本案例没有使用MyBatis,所以我们使用静态数据 
		List<User> userList = new ArrayList<User>();  
		userList.add(new User("张三", "男", 18));  
		userList.add(new User("李四", "女", 16));  
		userList.add(new User("王五", "未知", 20));
		
		//相当于request的setAttribute方法,可以在JSP中获取
		mv.addObject("userList", userList);
		
		//设置视图路径  
		//如果视图解析器中没有配置前缀和后缀,此处应该写为:/WEB-INF/userList.jsp
		mv.setViewName("userList");
		
		//返回modelAndView 
		return mv;
	}

}
学新通

Controller变动比较大,相比较xml配置的方式,注解式开发不再需要实现Controller接口,但是需要在类上加@Controller注解。提示:@Component、@Controller、@Service、@Repository四个注解作用相同,但是因为Controller是控制层,所以此处应该使用@Controller注解。@Service应该用在业务层,@Repository应该用在持久层,@Component一般用在POJO类或别处。

  • ①处注解@RequestMapping()意为请求映射,其中的参数为映射地址,推荐参数值和方法名相同。
  • ②处返回值为ModelAndView,方法名自取,符合命名规范即可。

8、编写JSP

9、部署项目运行,在浏览器中输入:http://localhost:8080/springmvc2/getUsers。

@RequestMapping()

RequestMapping()也可以写在类上(不建议这样写)

package com.tcc.controller;

import com.tcc.entity.User;

@Controller
@RequestMapping("/user")
public class UserController {
	
	@RequestMapping("/getUsers")
	public String getUsers(Model model){	
		//此处应该调用service业务层的查询方法,因为本案例没有使用MyBatis,所以我们使用静态数据 
		List<User> userList = new ArrayList<User>();  
		userList.add(new User("张三", "男", 18));  
		userList.add(new User("李四", "女", 16));  
		userList.add(new User("王五", "未知", 20));
		
		//相当于request的setAttribute方法,可以在JSP中获取
		model.addAttribute("userList", userList);
		
		//设置视图路径  
		//如果视图解析器中没有配置前缀和后缀,此处应该写为:/WEB-INF/userList.jsp
		
		//返回jsp页面
		return "userList";
	}

}
学新通

但是路径前面要加上:http://localhost:8080/springmvc2/user/getUsers。

或者(常用)

package com.tcc.controller;

import com.tcc.entity.User;

@Controller
public class UserController {
	
	@RequestMapping("/user/getUsers")
	public String getUsers(Model model){	
		//此处应该调用service业务层的查询方法,因为本案例没有使用MyBatis,所以我们使用静态数据 
		List<User> userList = new ArrayList<User>();  
		userList.add(new User("张三", "男", 18));  
		userList.add(new User("李四", "女", 16));  
		userList.add(new User("王五", "未知", 20));
		
		//相当于request的setAttribute方法,可以在JSP中获取
		model.addAttribute("userList", userList);
		
		//设置视图路径  
		//如果视图解析器中没有配置前缀和后缀,此处应该写为:/WEB-INF/userList.jsp
		
		//返回jsp页面
		return "userList";
	}

}
学新通

也可以在注解里添加参数来设置请求(方法一,不常用。方法二见下↓)

@RequestMapping(value="/user/getUsers",method=RequestMethod.POST)

RestFul风格

路径不用&和?传参统一全部用/

RESTful示例
  1. /account/1 HTTP GET:得到id=1的account
  2. /account/1 HTTP DELETE:删除id=1的account
  3. /account/1 HTTP PUT:更新id=1的account

路径一样,提交方法不一样走的comtroller不一样

@GetMapping("/user/getUsers2/{a}/{b}")
public String getUsers2(@PathVariable int a, @PathVariable int b,Model model){
  int num = a b;

  String msg = "get传入value的值为:" num;

  model.addAttribute("value", msg);

  return "a";

}

@PostMapping("/user/getUsers2/{a}/{b}")
public String getUsers3(@PathVariable int a, @PathVariable int b,Model model){
  int num = a b;

  String msg = "post传入value的值为:" num;

  model.addAttribute("value", msg);

  return "a";

}
学新通
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>

<form action="/springmvc02-annotation/user/getUsers2/1/3" method="get">
	<input type="submit">
</form>

</body>
</html>
学新通

如果表单提交方法为get则走上面的controller方法,如果为post则走下面的

RestFul的CRUD

@RequestMapping:通过设置method属性的CRUD,可以将同一个URL映射不同HandlerMethod方法上。

@GetMapping、@PostMapping、@PutMapping、@DeleteMapping注解同@RequestMapping注解的method属性设置。

方法一:正常

//正常:localhost:8080/springmvc02-annotation/user/getUsers2?a=1&b=2
@GetMapping("/user/getUsers2")
public String getUsers2(int a, int b, Model model){
  int num = a b;

  model.addAttribute("value", num);

  return "a";

}

@PathVariable:可以解析出来URL中的模板变量({a}/{b})

//RestFul:localhost:8080/springmvc02-annotation/user/getUsers2/1/2
@GetMapping("/user/getUsers2/{a}/{b}")
public String getUsers2(@PathVariable int a, @PathVariable int b,Model model){
  int num = a b;

  model.addAttribute("value", num);

  return "a";

}

重定向和转发

方法一:

//在SpringMVC中仍然可以使用传统方式实现转发和重定向
request.getRequestDispatcher(" ").forward(request,response);
//重定向
response.sendRedirect(" ");

方法二:

转发写【forward】的话是不走视图解析器的,不写的话是走视图解析器的。

//请求的转发,不能使用视图解析器
//使用视图解析器的话默认就是转发
return "forward:/WEB-INF/pages/success.jsp";
//重定向
return "redirect:index";

接收请求参数及数据回显

提交的域名和处理方法的参数名一致:

提交数据:localhost:8080/springmvc02-annotation/user/getUsers5/?name=大米&age=20

处理方法:

@GetMapping("/user/getUsers5")
public String getUsers5(String name, Integer age,Model model){

  String msg = "大家好,我叫:" name   "我今年"   age   "岁了";

  model.addAttribute("value", msg);

  return "a";

}

提交的域名和处理方法的参数名不一致:
提交数据:localhost:8080/springmvc02-annotation/user/getUsers6/?name=大米&age=20

处理方法:【@RequestParam("")】

@GetMapping("/user/getUsers6")
public String getUsers6(@RequestParam("name") String myName,@RequestParam("age") Integer myAge,Model model){

  String msg = "大家好,我叫:" myName   "我今年"   myAge   "岁了";

  model.addAttribute("value", msg);

  return "a";

}

提交的参数为对象

要求:提交的表单和对象的属性名一致

提交数据:localhost:8080/springmvc02-annotation/user/getUsers7/?name=大米&age=20&sex=男

处理方法:

@GetMapping("/user/getUsers7")
public String getUsers7(User user,Model model){

  String msg = "大家好,我叫:" user.getName()   ",性别:"  user.getSex()   ",我今年"   user.getAge()   "岁了";

  model.addAttribute("value", msg);

  return "a";

}
小结
  1. 当提交的域名和处理方法的参数名一样时,会自动匹配值
  2. 当提交的域名和处理方法的参数名不一样时,需要在参数前定义注解【@RequestParam("")】
  3. 当提交的参数为对象时,要求是:提交的表单和对象的属性名一致才会自动匹配值。
  4. 【@RequestParam】和mybatis中dao层的方法中参数前的【@Param】是一样的,是一种规范,所以不管域名和参数名是否一样,都需要添加【@RequestParam】注解。

JSON乱码问题

表单提交controller获得中文参数后乱码解决方案

注意: jsp页面编码设置为UTF-8

form表单提交方式为必须为post,get方式下面spring编码过滤器不起效果

方式一:通过设置@RequestMapping的produces属性。

@RequestMapping(value = "json1",produces = "application/json;charset=utf-8")
@ResponseBody
public String json() throws JsonProcessingException {
  // 创建对象
  User user = new User("张三",18,"男");
  // 格式化对象
  return new ObjectMapper().writeValueAsString(user);
}

方式二:设置springmvc.xml配置文件的mvc:annotation-driven

注意:先导入jackson的jar包:

学新通

<!-- JSON乱码问题配置 -->
<mvc:annotation-driven>
  <mvc:message-converters register-defaults="true">
    <bean class="org.springframework.http.converter.StringHttpMessageConverter">
      <constructor-arg value="UTF-8"/>
    </bean>
    <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
      <property name="objectMapper">
        <bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
          <property name="failOnEmptyBeans" value="false"/>
        </bean>
      </property>
    </bean>
  </mvc:message-converters>
</mvc:annotation-driven>

JSON(用于前后端分离)

新建TestController

@ResponseBody:不走解析器,会返回一个字符串

@RestController:和上面一样,但是写在类上,表明这个类里的方法都不走,一劳永逸!(建议)

package com.tcc.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.tcc.entity.User;

//@Controller
@RestController
public class TestController {
	@RequestMapping("/t/t1")
	//@ResponseBody	它不会走视图解析器,会直接返回一个字符串
	public String test1(Model model) throws JsonProcessingException{
		ObjectMapper mapper = new ObjectMapper();
		
		User user = new User("小黑","男",20);
		
		String st = mapper.writeValueAsString(user);
		
		return st;
	}

}
学新通
日期转换json格式

直接转的话使用的是时间戳

@RestController
public class TestController {
	@RequestMapping("/t/t1")
	//@ResponseBody	它不会走视图解析器,会直接返回一个字符串
	public String test1(Model model) throws JsonProcessingException{
		ObjectMapper mapper = new ObjectMapper();
		
		ArrayList<User> list = new ArrayList<User>();
		
		Date date = new Date();
		
		String st = mapper.writeValueAsString(date);
		
		return st;
	}

}
学新通

结果:

学新通

解决办法:使用SimpleDateFormat转换成能看懂的格式

@RestController
public class TestController {
	@RequestMapping("/t/t1")
	//@ResponseBody	它不会走视图解析器,会直接返回一个字符串
	public String test1(Model model) throws JsonProcessingException{
		ObjectMapper mapper = new ObjectMapper();
		
		Date date = new Date();
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");
		String s = sdf.format(date);
		
		String st = mapper.writeValueAsString(s);
		
		return st;
	}
}
学新通

结果 :

学新通

或者创建工具类方便获取json格式的日期的复用

创建util包和类

package com.tcc.util;

import java.text.SimpleDateFormat;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonUtil {
	
	public static String getJsonDate(Object object,String dateFormat) throws JsonProcessingException{
		ObjectMapper mapper = new ObjectMapper();
		
		SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
		String format = sdf.format(object);
		
		return mapper.writeValueAsString(format);
		
	}

}
学新通

调用:

@RestController
public class TestController {
	@RequestMapping("/t/t1")
	//@ResponseBody	它不会走视图解析器,会直接返回一个字符串
	public String test1(Model model) throws JsonProcessingException{
		Date date = new Date();
		return JsonUtil.getJsonDate(date, "yyyy-MM-dd HH-mm-ss");
	}

}

或者工具类里重构方法(方法里面调用方法),修改util工具类(调用方法的时候只需要提供一个日期变量)

public class JsonUtil {
	public static String getJsonDate(Object object) throws JsonProcessingException{
		return getJsonDate(object, "yyyy-MM-dd HH-mm-ss");
	}
	
	public static String getJsonDate(Object object,String dateFormat) throws JsonProcessingException{
		ObjectMapper mapper = new ObjectMapper();
		
		SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
		String format = sdf.format(object);
		
		return mapper.writeValueAsString(format);
		
	}

}
学新通

修改测试类代码:

@RestController
public class TestController {
	@RequestMapping("/t/t1")
	//@ResponseBody	它不会走视图解析器,会直接返回一个字符串
	public String test1(Model model) throws JsonProcessingException{
		
		Date date = new Date();
		
		return JsonUtil.getJsonDate(date);
	}

}

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhhahcba
系列文章
更多 icon
同类精品
更多 icon
继续加载