SpringMVC-数据处理

springMVC接收数据

controller的参数名若与请求参数名一致,则框架会帮我们注入,也可以通过配置

@RequestParam(“请求的参数名”)注解来帮助框架找到我们需要的属性。

若我们的需要将参数注入一个对象,则我们的对象属性名称需要与请求参数相对应。

若对象中有引用的对象属性,则请求参数可以为
“引用属性名.引用属性的属性名”
例如:

User user; 
user.name="eddie";

List<User> list;
list[0].name="eddie";

Map<String, User> map;
map['first'].name="eddie";

即可注入被引用的对象。

@RequestBody

仅限Post请求,以Controller以String接收以 变量名=值&变量名=值&变量名=值,这样的形式传递。
例:id=1&name=eddie&age=18
后端导入 jackson包后,使用RequestBody注解,即可把请求过来的json数据封装到一个对象中去(要求传递的变量值要与对象中的属性名的set后面字段相同)。

@PathVariable

与RestFul风格一同使用,可以通过占位符获取url中的数据。

@RequestMapping("/testPathVariable/{sid}")
    public String testPathVariable(@PathVariable("sid") String id) {
        System.out.println(id);

        return "success";
    }
@CookieValue

获取Cookie中的值

    @RequestMapping("/testCookie")
    public String testCookie(@CookieValue(value = "JSESSIONID") String id) {
        System.out.println(id);

        return "success";
    }
@ModelAttribute
  • 作用:
    在对应Controller方法执行前执行,用于补充前端传过来的数据不全的情况,例如只传过了一个name时,我们需要从数据库中拿到这个name对应的完整用户信息时,可以通过@ModelAttribute获取name参数,补全user对象,再传递给对应的Controller方法。
    1. 出现在方法上:表示当前方法会在控制器方法执行前线执行。
    2. 出现在参数上:获取指定的数据给参数赋值。
  • 有返回值写法:
 @RequestMapping("/testModelAttribute")
    public String testModelAttribute(User user) {
        System.out.println(user);
        return "success";
    }

    /**
     * 表单提交的数据不全时,我们需要通过数据库补全User
     * @param name 表单提交的数据
     * @return
     */
    @ModelAttribute
    public User showUser(String name){
        System.out.println("showUser执行了...");
        //通过用户名查询数据库(模拟)
        int id = 1;//查询到
        ind age = 18;//查询到
        
        User user = new User();
        user.setName(name);
        user.setId(id);
        user.setAge(age);

        return user;
    }
  • 无返回值写法:
    通过Map存储
	@RequestMapping("/testModelAttribute")
    public String testModelAttribute(@ModelAttribute("userabc") User user) {
        System.out.println(user);
        return "success";
    }
	
	@ModelAttribute
    public void showUser(String name, Map<String, User> map){
        System.out.println("showUser执行了...");
        //通过用户名查询数据库(模拟)
        User user = new User();
        user.setName(name);
        user.setId(1);
        user.setAge(18);
        
        map.put("userabc", user);
    }
@SessionAttributes
  1. 作用:用于多次执行控制器方法间的参数共享
  2. 属性
    • value:指定存入属性的名称
@Controller 
@RequestMapping(path="/user") 
@SessionAttributes(value= {"username","password","age"},types= 
{String.class,Integer.class}) // 把数据存入到session域对象中 
public class HelloController { 
/**
* 向session中存入值 
* @return 
*/ 
@RequestMapping(path="/save") 
public String save(Model model) { 
System.out.println("向session域中保存数据"); 
model.addAttribute("username", "root"); 
model.addAttribute("password", "123"); 
model.addAttribute("age", 20); 
return "success"; 
}
/**
* 从session中获取值 
* @return 
*/ 
@RequestMapping(path="/find") 
public String find(ModelMap modelMap) { 
String username = (String) modelMap.get("username"); 
String password = (String) modelMap.get("password"); 
Integer age = (Integer) modelMap.get("age"); 
System.out.println(username + " : "+password +" : "+age); 
return "success"; 
}
/**
* 清除值 
* @return 
*/ 
@RequestMapping(path="/delete") 
public String delete(SessionStatus status) {status.setComplete(); 
return "success"; 
} 
}

springMVC自定义类型转换

springMVC帮我们把字符串自动转成了我们想要的类型,但是,在某些情况。springMVC却不能够知道我们需要把一个字符串按照什么样的格式转换,这时候我们就需要自定义类型转换器。

  1. 实现Converter<T, T>接口
public class StringToDateConverter implements Converter<String, Date> {

    @Override
    public Date convert(String s) {
        //判断
        if(s == null) {
            throw new RuntimeException("请你传入数据");
        } else {
            DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
            try {
                return df.parse(s);
            } catch (ParseException e) {
                throw new RuntimeException("数据类型转换出现错误");
            }
        }
    }
}
  1. 配置自定义类型转换器
<!--    配置自定义类型转换器-->
    <bean id="conversionService"
    class="org.springframework.context.support.ConversionServiceFactoryBean">
        <property name="converters">
            <set>
                <bean class="pro.eddievim.utils.StringToDateConverter"/>
            </set>
        </property>
    </bean>
  1. 注册驱动
<!--    开启注解扫描支持-->
    <mvc:annotation-driven conversion-service="conversionService"/>

获取原生的ServletAPI

直接在Controller方法上写上HttpServletRequest,与HttpServletResponse。即可获取到原生的API。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值