springmvc_day04_请求参数绑定

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35537301/article/details/82495667

默认类型的参数绑定

HttpServletRequest,HttpServletResponse,HttpSession,Model

条件

url传递的参数名必须和request.getParameter(参数名一致)

案例

controller

package com.itheima.controller;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import com.itheima.pojo.Items;
import com.itheima.service.ItenService;

@Controller
public class ItemController {

	@Autowired
	private ItenService itemService;
	
	/**
	 * 根据商品ID查询商品信息的
	 * 返回String类型的
	 * 当返回String类型是简单的String类型时:不包含forward,redirect这关键字的是简单的String类型
	 * 返回的默认返回视图名称,走视图解析器
	 * @return
	 */
	@RequestMapping("itemEdit")
	public String itemEdit(HttpServletRequest request, Model model){//Model:模型,封装数据传递用的
		//获取参数
		String idStr = request.getParameter("id");
		//根据商品ID查询商品信息
		Items items = itemService.findItemById(Integer.parseInt(idStr));
		//封装数据传给页面
		model.addAttribute("item", items);
		//返回视图名称
		return "editItem";
	}
}

 service层

package com.itheima.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.itheima.mapper.ItemsMapper;
import com.itheima.pojo.Items;

@Service
public class ItenServiceImpl implements ItenService {

	@Autowired
	private ItemsMapper itemsMapper;

	@Override
	public Items findItemById(Integer id) {
		Items items = itemsMapper.selectByPrimaryKey(id);
		return items;
	}

}

简单类型的参数绑定

8种基本类型和他的包装类

使用@RequestParam常用于处理简单类型的绑定。

value参数名字,即入参的请求参数名字,如value=“itemId表示请求的参数    区中的名字为itemId的参数的值将传入

required是否必须,默认是true,表示请求中一定要有相应的参数,否则将报错

TTP Status 400 - Required Integer parameter 'XXXX' is not present

defaultValue默认值,表示如果请求中没有同名参数时的默认值

条件

Input框中的name属性名必须和方法形参名一致

package com.itheima.controller;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import com.itheima.pojo.Items;
import com.itheima.service.ItenService;

@Controller
public class ItemController {

	@Autowired
	private ItenService itemService;

	@RequestMapping("updateItem")
	public String updateItem(Integer id,String name,Float price,String detail){
		//处理数据
		System.out.println("*****id*****"+id);
		System.out.println("*****name*****"+name);
		return "success";
	}
}

问题

有三十个字段

POJO对象类型的参数绑定

条件

Input框中的name属性名必须和方法形中POJO对象中的属性名一致

package com.itheima.controller;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import com.itheima.pojo.Items;
import com.itheima.service.ItenService;

@Controller
public class ItemController {

	@Autowired
	private ItenService itemService;
	
	/**
	 * @MethodName:updateItem
	 * @Description:POJO对象类型的参数绑定
	 * @param items
	 * @return
	 */
	@RequestMapping("updateItem")
	public String updateItem(Items items){
		//处理数据
		System.err.println(items);
		return "success";
	}
}

POJO 包装对象的参数绑定

应用场景

高级搜索,不同维度上的搜索

条件

Input框中的name属性名必须和方法形参的POJO包装对象中的属性名的属性名一致

package com.itheima.pojo;

public class QueryVo {

	private Items item;
	private User user;

	set/get...

}

 

package com.itheima.controller;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import com.itheima.pojo.Items;
import com.itheima.pojo.QueryVo;
import com.itheima.service.ItenService;

@Controller
public class ItemController {

	@RequestMapping("queryItem")
	public String queryItem(QueryVo vo){
		System.out.println(vo);
		return "success";
	}
}

自定义类型的参数绑定Converter

应用场景

页面中传递的简单类型的数据,在Controller方法中接收的是复杂类型,springmvc不能帮我们自动转换,这种情况下需要我们手动配置类型转换

例子

当页面中专递的是String类型,方法形参中用Date类型接收,SpringMVC不能帮我们转换类型,需要手动写!

案例

类型转换器

package com.itheima.utils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.springframework.core.convert.converter.Converter;

/**
 * @ClassName: StringToDateConverter
 * @Description:
 * 参数1:要转换的类型
 * 参数2:目标类型
 */
public class StringToDateConverter implements Converter<String, Date> {

	@Override
	public Date convert(String source) {
		//手动转换
		try {
			Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(source);
			return date;
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return null;
	}

}

 在springmvc.xml文件中配置类型转换器

方式1

<!-- 配置注解驱动 -->
<!-- 如果配置此标签,可以不用配置... -->
<mvc:annotation-driven conversion-service="conversionService" />

<!-- 转换器配置 -->
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
	<property name="converters">
		<set>
			<bean class="com.itheima.utils.StringToDateConverter" />
		</set>
	</property>
</bean>

方式2:

  • 此方法需要独立配置处理器映射器、适配器
  • 不再使用<mvc:annotation-driven/>
<!--注解适配器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
	<property name="webBindingInitializer" ref="customBinder"></property>
</bean>

<!-- 自定义webBinder -->
<bean id="customBinder" class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">
	<property name="conversionService" ref="conversionService" />
</bean>

<!-- 转换器配置 -->
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
	<property name="converters">
		<set>
			<bean class="cn.itcast.springmvc.convert.DateConverter" />
		</set>
	</property>
</bean>

数组类型的参数绑定

应用场景

邮箱中的批量删除,批量标记

条件

Input框中的name属性名必须和方法形参数组名或者POJO包装对象中的数组属性名一致

数组类型的接收方式

  • 直接接收数组类型的数据
package com.itheima.controller;

import java.util.Arrays;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import com.itheima.pojo.Items;
import com.itheima.pojo.QueryVo;
import com.itheima.service.ItenService;

@Controller
public class ItemController {
	
	@RequestMapping("deleteItem")
	public String deleteItem(Integer[] ids){
		System.out.println("-----------ids"+Arrays.toString(ids));
		return "success";
	}
}
  • 接收POJO包装对象
package com.itheima.pojo;

public class QueryVo {

	private Items item;

	private User user;

	private Integer[] ids;

        set/get...
}
package com.itheima.controller;

import java.util.Arrays;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import com.itheima.pojo.Items;
import com.itheima.pojo.QueryVo;
import com.itheima.service.ItenService;

@Controller
public class ItemController {
	
	@RequestMapping("deleteItem")
	public String deleteItem(QueryVo vo){
		System.out.println("-----------ids"+vo);
		return "success";
	}
}

list集合类型的参数绑定

应用场景

批量修改

条件

Input框中的name属性名必须和方法形参的POJO包装对象中的属性名的下标的属性名一致

怎么接收

SpringMVC不支持直接接收,只能接收POJO包装对象

package com.itheima.pojo;

import java.util.List;

public class QueryVo {

	private Items item;

	private User user;

	private List<Items> items;

        set/get...
}
package com.itheima.controller;

import java.util.Arrays;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import com.itheima.pojo.Items;
import com.itheima.pojo.QueryVo;
import com.itheima.service.ItenService;

@Controller
public class ItemController {
	
	@RequestMapping("updateItems")
	public String updateItem(QueryVo vo){
		return "success";
	}
}

猜你喜欢

转载自blog.csdn.net/qq_35537301/article/details/82495667