企业级spring学习日记(五)

本文详细介绍了SpringMVC中的请求与响应处理,包括@RequstMapping的使用,如设置请求映射路径,处理不同类型的参数(普通、POJO、嵌套POJO、数组、JSON),以及POST请求中文乱码的解决方法。此外,还讲解了@RequestBody和@DateTimeFormat注解的作用,以及如何进行日期类型参数的传递和类型转换器的使用。响应部分涉及了@ResponseBody注解的应用,如何返回文本和JSON数据。
摘要由CSDN通过智能技术生成

SpringMVC请求与响应

请求映射路径

  • 名称:@RequestMapping
  • 类型:方法注解、类注解
  • 位置:SpringMVC控制器方法定义上方
  • 作用:设置当前控制器方法请求访问路径,如果设置在类上统一设置当前控制器方法请求访问路径前缀
  • 范例:
@Controller
@RequestMapping("/user")
public class UserController {
	@RequestMapping("/save")
	@ResponseBody
	public String save(){
		System.out.println("user save");
		return"{'module':'user save'}";
	}
}
  • 属性
    value(默认):请求访问路径,或访问路径前缀

参数种类
普通参数、POJO参数、嵌套POJO类型参数、数组类型参数、集合类型参数

  • 普通参数:url地址传参,地址参数名与形参变量名相同,定义形参即可接受参数。
    请求参数与形参名不同时可以在形参前面加入@RequestParam(“请求参数名”)

@RequestParam形参注解,位于SpringMVC控制器方法形参定义前面,能够绑定请求参数与处理器方法形参间的关系

  • Get请求传参
@RequesMapping("/commonParam")
@ResponseBody
public String commParam(@RequestParam("name")String us erName , int age) {
	System.out.println("普通参数传递 name ==>"+name);
	System.out.println("普通参数传递 age ==>"+age);
	return"{'module':'common param'}";
}
  • Post请求传参
    form表单post请求传参,表单参数名与形参变量名相同,定义形参即可接收参数
@RequestMapping("/commonParam")
@ResponseBody
public String commonParam(String name,int age){
	System.out.println("普通参数传递 name ==>"+name);
	System.out.println("普通参数传递 age ==>"+age);
	return"{'module':'common param'}";
}
  • Post请求中文乱码处理
    为web容器添加过滤器并指定字符集,Spring-web包中提供了专用的字符过滤器
public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer{
protected Filter[] getServletFilters(){
	CharacterEncodingFilter filter = new CharacterEncodingFilter();
	filter.setEncoding("utf-8");
	return new Filter[]{filter};
	}
}
  • POJO参数:请求参数名与形参对象属性名相同,定义POJO类型形参即可接收参数
@RequesMapping("/pojoParam")
@ResponseBody
public String pojoParam(User user) {
	System.out.println("pojo参数传递 user ==>"+user);
	return"{'module':'pojo param'}";
}
  • 嵌套POJO参数:POJO对象中包含POJO对象,请求参数名与形参对象属性名相同,按照对象层次结构关系即可接收嵌套POJO属性参数
    在这里插入图片描述
public calss User{
	private String name;
	private int age;
	private Address address;
}

public  class Address{
	private String province;
	private String city;
}
@RequestMapping("/pojoContainPojoParam")
@ResponseBody
public String pojoContainPojoParam(User user){
	System.out.println("pojo嵌套pojo参数传递 user==>"+user);
	return"{'module':'pojo contain pojo param'}";
}
  • 数组参数:请求参数名与形参对象属性名相同切请求参数为多个,定义数组类型形参即可接收参数
    在这里插入图片描述
@RequestMapping("/arrayParam")
@ResponseBody
public String arrayParam(String[] likes){
	System.out.println("数组参数传递 likes ==>" +Arrays.toString(likes));
	return"{'moudle':'array param'}";
}

请求参数(传递json数据)
@EnableWebMvc配置类注解,在SpringMVC配置类定义上方,用于开启SpringMVC多项辅助功能
@RequestBody形参注解,在SpringMVC控制器方法形参定义前面,用于将请求中请求体所包含的数据传递给请求参数,此注解一个处理器方法只能使用一次
①:添加json数据相关坐标

<dependency>
	<groupId>com.fasterxml.jackson.core</groupId>
	<artifactId>jackson-databind</artifactId>
	<version>2.9.0</version>
</dependeny>

②:设置发送json数据
③:开启自动转换json数据的支持

@Configuration
@ComponentScan("com.mei.controller")
@EnableWebMvc
public class SpringMvcConfig{
}

④:设置接收json数据

@RequestMapping("/listParamJson")
@ResponseBody
public String listParamForJson(@RequestBody List<String> likes){
	System.out.println("list common(json)参数传递 list ==>"+likes);
	return"{'moudle':'list common for json param'}";
}

日期类型参数传递
@DateTimeFormat形参注解,位于SpringMVC控制器方法形参前面,作用是设定日期时间型数据格式,属性pattern

  • 日期类型数据基于系统不同格式也不尽相同
    接收形参是,根据不同日期格式设置不同的接收方法
@RequestMapping("/dataParam")
@ResponseBody
public String dataParam(Date date,
										@DateTimeFormat(pattern = "yyyy-MM-dd") Date date1,
										@DateTimeFormat(pattern = "yyyy/MM/dd HH:mm:ss")Date date2){
											System.out.println("参数传递	date ==>"+date);
											System.out.println("参数传递	date(yyyy-MM-dd)==>"+date1);
											System.out.println("参数传递	date(yyyy/MM/DD HH:mm:ss)==>"+date2);
											return "{'moudle': 'data param'}";
										}
http://localhost/dataParam?date=2088/08/08&date1=2088-08-18&date2=2088/08/28 8:08:08

类型转换器

  • Converter接口
public interface Converter<S, T> {
	@Nullable
	T convert(S var1)	
}

请求参数年龄数据(String→Integer)
日期格式转换(String→Date)

  • @EnableWebMvc功能之一:根据类型匹配对应的类型转换器

响应
@ResponseBody方法注解,位于SpringMVC控制器方法定义上方,作用为设置当前控制器返回值作为响应体

  • 页面响应
@RequestMapping("toPage")
public String toPage(){
	return "page.jsp";
}
  • 相应文本数据
@RequestMapping("/toText")
@ResponseBody
public String toText(){
	return "response text";
}
  • 相应json数据(对象转json)
@RequestMapping("/tpJsonPOJO")
@ResponseBody
public User toJsonPOJO(){
	User user = new User();
	user.seName("张三");
	user.setAge(41);
	return user;
}
  • 响应json数据(对象集合转json数组)
@RequestMapping("/toJsonList")
@ResponseBody
public List<User> toJsonList(){
	User.user1 = new User();
	user1.setName("张三");
	user1.setAge(41);
	User user2 = new User();
	user2.setNmae("李四")
	user2.setAge(40);
	List<User> userList = new ArrayList<User>();
	userList.add(user1);
	userList.add(user2);
	return userList;
}
  • HttpMessageConverter接口
public interface HttpMessageConverter<T> {
	boolean canRead(Class<?> clazz,@Nullable MediaType mediaType);
	boolean canWrite(Class<?> clazz,@Nullable MediaType mediaType);
	List<MediaType> getSupportedMediaTypes();
	T read(Class<? extends T> class,HttpInputMessage inputMessage)
		throws IOException,HttpMessageNotReadableException;
	void wirte(T t,@Nullable MediaType contentType,HttpOutputMessage outputMessage)
		throws IOEception,HttpMessageNoWritableException;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值