SpringMVC-复杂参数处理

本文详细介绍了如何在Spring MVC中创建实体类(如Role和User)、复杂参数DTO类(UserDTO)以及控制器(ParamsController)的使用,包括参数绑定、请求头和Cookie获取,以及整合Servlet API。实例演示了如何处理不同类型的参数,如基本类型、数组、列表、映射和实体对象。
摘要由CSDN通过智能技术生成

1.实体类

package com.hwy.entity;

public class Role {

    private Integer id;
    private String name;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Role{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}

package com.hwy.entity;

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

public class User {

    private Integer id;
    private String name;
    private String[] alias; //外号
    private List<String> hobbies; //兴趣爱好
    private Map<String, String> relative; //亲属
    private Role role;
    private List<User> friends; //朋友


    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String[] getAlias() {
        return alias;
    }

    public void setAlias(String[] alias) {
        this.alias = alias;
    }

    public List<String> getHobbies() {
        return hobbies;
    }

    public void setHobbies(List<String> hobbies) {
        this.hobbies = hobbies;
    }

    public Map<String, String> getRelative() {
        return relative;
    }

    public void setRelative(Map<String, String> relative) {
        this.relative = relative;
    }

    public Role getRole() {
        return role;
    }

    public void setRole(Role role) {
        this.role = role;
    }

    public List<User> getFriends() {
        return friends;
    }

    public void setFriends(List<User> friends) {
        this.friends = friends;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", alias=" + Arrays.toString(alias) +
                ", hobbies=" + hobbies +
                ", relative=" + relative +
                ", role=" + role +
                ", friends=" + friends +
                '}';
    }


}

复杂参数DTO类

package com.hwy.entity;

public class UserDTO {
    private User user;
    private Role role;

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    public Role getRole() {
        return role;
    }

    public void setRole(Role role) {
        this.role = role;
    }

    @Override
    public String toString() {
        return "UserDTO{" +
                "user=" + user +
                ", role=" + role +
                '}';
    }
}

2.控制类

package com.hwy.controller;

import com.hwy.entity.UserDTO;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Controller
public class ParamsController {
    /*在springmvc中只需要在处理方法中声明对应的参数可以自动接收请求的参数并且还可以自动转换类型,如果没匹配到则报400错误,
    匹配规则:请求的参数必须跟处理方法的参数名一致,不一致可以用@RequestParam
    required:默认必须传参数 false可以不用传值,注意不要用基础数据类型
    defaultValue:默认值,当参数为null的时候自动设置一个默认值
    GET:直接设置tomcat中conf/server.xml 添加URIEncoding="utf-8"
    POST:在servlet时期,设置request.setCharacterEncoding("utf-8") 现在使用过滤器CharacterEncodingFilter 在web.xml中配置
            */

    @RequestMapping("/params01")
    public String param01(@RequestParam(value="username",required=false,defaultValue="婉婉") String name){
        System.out.println(name);
        return "index.jsp";
    }

    /*
    *  复杂数据参数类型-对象:不用加上参数的名字,直接传入该对象对应的属性名
            1.如果是包装类型的简单变量 输入属性的名字=表单元素的name
            2.数组 这一组表单元素都是相同的name
            3.List:必须加上索引
            4.Map:必须加上key
            5.实体类:只能给某个属性赋值
            6.如果出现多个对象参数的情况 建议封装一层bean(DTO)*/
    @RequestMapping("/params02")
    public String param02(UserDTO userDTO){
        System.out.println(userDTO);
        return "index.jsp";
    }

    /*
    *获取请求头
    * 里面也有required,defaultValue 用法一样
    * */
    @RequestMapping("/header")
    public String header(@RequestHeader("Host") String host){
        System.out.println(host);
        return "index.jsp";
    }

    /*
    * 获取cookie
    * */

    @RequestMapping("/cookie")
    public String cookie(@CookieValue ("JSESSIONID")String jsSessionId ){
        System.out.println(jsSessionId);
        return "index.jsp";
    }

    /*
    * 获取servlet中的api
    * HttpServletRequest  request,HttpServletResponse response
    * HttpSession
    * Principal获取安全协议相关
    * Local获取当前语言
    * ServletInputStream OutputStream
    *可以结合SpringMVC和servlet api一起用
    * */
    @RequestMapping("/servlet")
    public String servlet(String username,HttpServletRequest request, HttpServletResponse response){
        System.out.println(username);
        String name = request.getParameter("name");
        System.out.println(name);
        request.setAttribute("name",name);

        return "index.jsp";
    }





}


3.JSP 类

<%--
  Created by IntelliJ IDEA.
  User: MSI-NB
  Date: 2021/12/7
  Time: 17:50
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

<h2>不要放弃</h2>

<form action="${pageContext.request.contextPath}/params01" method="post">
    姓名:<input name="username" type="text"><p></p>
        <input type="submit" value="提交">
</form>

<form action="${pageContext.request.contextPath}/params02" method="post">
    id: <input name="user.id" type="text"><p></p>
    姓名:<input name="user.name" type="text"><p></p>
    外号:<input name="user.alias" type="checkbox" value="婉婉" checked>婉婉
        <input name="user.alias" type="checkbox" value="何何" checked>何何<p></p>
    爱好:<input name="user.hobbies[0]" type="checkbox" value="音乐" checked>音乐
        <input name="user.hobbies[1]" type="checkbox" value="跳舞" checked>跳舞<p></p>
    亲属:<input name="user.relative['father']" type="checkbox" value="爸爸" checked>爸爸
        <input name="user.relative['mother']" type="checkbox" value="妈妈" checked>妈妈<p></p>
    角色:<input name="user.role.id" type="text" ><p></p>
    朋友:<input name="user.friends[0].name" type="text" value="朋友1"><br>
        <input name="user.friends[1].name" type="text" value="朋友2"><br>

        <h2>角色</h2>
        id:<input name="role.id" type="text" ><p></p>
        姓名:<input name="role.name" type="text"><p></p>

        <input type="submit" value="提交">
</form>

</body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值