SpringMVC-数据回写和异常处理及JSON操作

一、 数据回写

数据回写:在做数据更新的时候服务端查询的数据自动填充到表单中。

1.1 、默认方式

controlller

@RequestMapping("/fun")
	public String fun(String bookName,String author,Integer publicYear,Model model){
		if ("xx".equals(bookName)&&"qw".equals(author)&&"2019".equals(publicYear)) {
			return "/book.jsp";
		}	
		model.addAttribute("bookName", bookName);
		model.addAttribute("author", author);
		model.addAttribute("publicYear", publicYear);
		return "forward:/book.jsp";
	}

页面中的回写

<form action="add" method="post">
		书名:<input type="text" name="bookName" value="${book.bookName}"><br>
		作者:<input type="text" name="author" value="${book.author}"><br>
		出版年份<input type="text" name="publicYear" value="${book.publicYear}"><br>
		<input type="submit" value="提交">
	</form>

model

/**
	 * 
	 * @param book
	 *        会自动保存在Model对象中 key是 book 
	 *            m.addAttribute("book", book);
	 * @return
	 */
	@RequestMapping("/update")
	public String update(Book book) {
		System.out.println(book);
		book.setBookName("ps");
		return "/book.jsp";
	}

3.@ModelAttribute注解实现

3.1 修改参数回显变量名
@RequestMapping("/add")
	public String add(@ModelAttribute("bk")Book book) {
		System.out.println(book);
		book.setBookName("abc");
		return "/book.jsp";
	}
页面
<form action="add" method="post">
		书名:<input type="text" name="bookName" value="${bk.bookName}"><br>
		作者:<input type="text" name="author" value="${bk.author}"><br>
		出版年份<input type="text" name="publicYear" value="${bk.publicYear}"><br>
		<input type="submit" value="提交">
	</form>

配置全局变量名

@RequestMapping("/add")
	public String add(@ModelAttribute("bk")Book book) {
		System.out.println(book);
		book.setBookName("abc");
		return "/book.jsp";
	}
/**
	 * 每个方法都会方法的数据
	 * 
	 * @return
	 */
	@ModelAttribute("list")
	public List<String> getList() {
		return Arrays.asList("aa", "bb", "cc");
	}	
${list}<br>
	<form action="add" method="post">
		书名:<input type="text" name="bookName" value="${bk.bookName}"><br>
		作者:<input type="text" name="author" value="${bk.author}"><br>
		出版年份<input type="text" name="publicYear" value="${bk.publicYear}"><br>
		<input type="submit" value="提交">
	</form>

在这里插入图片描述

异常处理

项目中的异常需要统一处理,正常情况下,需要提前准备好一个错误页面,当项目出错了,将该页面展示给用户。
步骤:

定义异常处理器

package com.sxt.resolver;

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

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;


/**
 * 全局异常处理器
 * @author Administrator
 *
 */
@Component
public class GlobalExecptionResolver implements HandlerExceptionResolver {

	
	/**
	 * 全局异常处理的方法
	 *   return 返回null不执行,按照没有拦截的方式处理
	 */
	@Override
	public ModelAndView resolveException(HttpServletRequest request, 
			HttpServletResponse response,Object handler,
		Exception ex) {
		System.out.println("异常发生了");
		ModelAndView m=new ModelAndView();
		m.setViewName("/error.jsp");
		return m;
	}

	

}

需要处理的异常的地方抛出异常

在这里插入图片描述

测试

在这里插入图片描述

JSON数据交互

jackson处理

jar包
在这里插入图片描述


@Controller
public class SpringController {
	
	@RequestMapping("/fun1")
	@ResponseBody
	public Book fun1(){
		Book b=new Book();
		b.setBookId(1001);
		b.setBookName("ps");
		b.setAuthor("sp");
		return b;
	}
	
	@RequestMapping("/fun2")
	@ResponseBody
	public String[] fun2(){
		return new String[]{"a","b","c"};
	}
	
	@RequestMapping("/fun3")
	@ResponseBody
	public List<String> fun3(){
		return Arrays.asList("bb","aa","cc");
	}
	
	@RequestMapping("/fun4")
	@ResponseBody
	public Map<String, Object> fun4(){
		Map<String, Object>map=new HashMap<>();
		Book b=new Book();
		b.setBookId(1001);
		b.setBookName("ps");
		b.setAuthor("sp");
		map.put("b1", b);
		Book b2=new Book();
		b2.setBookId(1001);
		b2.setBookName("ps");
		b2.setAuthor("sp");
		map.put("b2", b2);
		map.put("total", 2);
		return map;
		
	}
	
}

接收JSON数据

导入juery文件

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="js/juery.min.js"></script>
</head>
<body>
	<input type="button" value="提交JSON数据" onclick="fun1();">
	<script type="text/javascript">
		function fun1() {
			$.ajax({
				type : 'POST',
				url : "test2",
				contentType : "application/json",//如果想以json格式把数据提交到后台的话,这个必须有,否则只会当做表单提交
				data : JSON.stringify({
					"bookId" : "2019",
					"bookName" : "ps"
				}),//JSON.stringify()必须有,否则只会当做表单的格式提交
				dataType : "json",//期待返回的数据类型
				success : function(data) {
					alert("success:" + data);
				},
				error : function(data) {
					alert("error" + data);
				}
			});
		}
	</script>
</body>
</html>

在这里插入图片描述

fastjson数据交互

在这里插入图片描述

配置文件(注册fastjson)

<!-- 开启扫描 -->
	<context:component-scan base-package="com.sxt.*"/>
	
	<!-- 开启SpringMVC注解的方式 -->
	<mvc:annotation-driven>
		<mvc:message-converters>
			<bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter"></bean>
		</mvc:message-converters>
	</mvc:annotation-driven>

在这里插入图片描述

处理中文乱码

在web.xml文件中配置

 <!-- spring框架提供的字符集过滤器 -->
	<!-- spring Web MVC框架提供了org.springframework.web.filter.CharacterEncodingFilter用于解决POST方式造成的中文乱码问题 -->
	<filter>
		<filter-name>encodingFilter</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>
		<init-param>
			<param-name>forceRequestEncoding</param-name>
			<param-value>true</param-value>
		</init-param>
		<init-param>
			<param-name>forceResponseEncoding</param-name>
			<param-value>true</param-value>
		</init-param>
	</filter>

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41546940/article/details/89462168