您当前的位置: 首页 >  spring

SpringMVC接收参数 具体示例一

梁云亮 发布时间:2021-11-22 17:11:48 ,浏览量:4

实体类
@Data
public class Dept {
    private Integer deptno;
    private String dname;
    private String loc;
}
后台控制器
@Controller
@RequestMapping("/dept")
public class DeptController {
    @RequestMapping("/add")
    void add(HttpServletRequest request){
        try {
            ServletInputStream is = request.getInputStream();
            String result = new BufferedReader(new InputStreamReader(is))
                    .lines().collect(Collectors.joining(System.lineSeparator()));
            System.out.println(result);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    @PostMapping(value = "/add1")
    public ModelAndView add1(HttpServletRequest request) {
        String deptno = request.getParameter("deptno");
        String dname = request.getParameter("dname");
        String loc = request.getParameter("loc");
        Dept dept = new Dept(Integer.parseInt(deptno), dname, loc);
        return new ModelAndView("/res", "res", dept);
    }

    @PostMapping("/add2")
    public ModelAndView add2(Integer deptno, String dname, String loc) {//前台页面传递过来的数据会自动实例化
        Dept dept = new Dept(deptno, dname, loc);
        return new ModelAndView("/res", "res", dept);
    }

    @RequestMapping("/add3")
    public ModelAndView add3(Dept dept) {//前台页面传递过来的数据会自动实例化
        System.out.println(dept);
        return new ModelAndView("/res", "res", dept);
    }

    @RequestMapping("add4")
    public void add4(Dept dept, HttpServletResponse response) throws IOException {// 变量的名称无所谓,不是必须得和前台页面一致,只要类型不错就行了
        response.setContentType("application/json");
        PrintWriter out = response.getWriter();
        ObjectMapper objectMapper = new ObjectMapper();
        String json = objectMapper.writeValueAsString(dept);
        out.write(json);
    }

    @ResponseBody
    @RequestMapping("add5")
    public Dept add5(Dept dept) throws IOException {// 变量的名称无所谓,不是必须得和前台页面一致,只要类型不错就行了
        return dept;
    }

}
普通表单 示例一:后台通过HttpServletRequest获取

    
    
    
    

示例二:后台通过具体的属性获取

    
    
    
    

示例三:后台通过具体的对象获取

    
    
    
    

示例四:后台通过具体的属性获取

    
    
    
    


    function add22() {
        let form = document.forms[0];
        form.action = "dept/add2";
        form.method = "POST";
        form.submit();
    }

前台以JSON方式传递数据 后台通过具体的对象获取

    
    
    
    添加部门


    $(function () {
        $("#addBtn").click(function () {
            let deptno = $("#deptno1").val();
            let dname = $("#dname1").val();
            let loc = $("#loc1").val();
            let dept = {deptno: deptno, dname: dname, loc: loc};
            $.ajax({
                url: "dept/add4",   // 注:add3、add4、add5都可以。
                type: "POST",   
                data: dept,
                success: function (data) {
                    alert(data.deptno + "  " + data.dname + "  " + data.loc);
                }
            });
        });
    })

指定contentType 网页通过JSON形式向后台传递数据

    
    
    
    


    function add32() {
        let deptno = $("#deptno3").val();
        let dname = $("#dname3").val();
        let loc = $("#loc3").val();
        let dept = {deptno: deptno, dname: dname, loc: loc};
        $.ajax({
            url: "dept/add1",
            type: "POST",   
            data: dept,
            // contentType: "application/json;charset=UTF-8",
            success: function (data) {
                alert(data.deptno + "  " + data.dname + "  " + data.loc);
            }
        });
    };

网页通过key/value形式向后台传递数据

    
    
    
    


    function add31() {
        // let p = $("#deptForm").serialize();
        // alert(p)  //deptno=32&dname=23&loc=32
        $.ajax({
            type: "post",
            dataType: "json", //预期服务器端返回的数据的类型
            url: "dept/add2",  // add1 - add5都能接收到数据
            // contentType: "application/x-www-form-urlencoded",//前端向服务器传递的数据的类型
            data: $("#deptForm1").serialize(),
            success: function (data) {
                console.info(data);
            }
        })
    }

注:

  • contentType: “application/x-www-form-urlencoded”

    • 如果不指定contentType,后台会将接收到的value值赋给Controller方法的对象参数(或封装后赋给Controller方法的对象参数):
    • 如果指定contentType,后台只能将接收到的value值赋给Controller方法的对应参数
  • contentType: “application/json;charset=UTF-8”

    • 如果不指定contentType,1-5都行
    • 如果指定contentType,只能通过add获取参数的值
    • 若控制器方法对象参数前面加@RequestBody@RequestParam,会报xhr

故:实际项目中,不建议指定contentType,省得为自己找麻烦

关注
打赏
1688896170
查看更多评论

梁云亮

暂无认证

  • 4浏览

    0关注

    1121博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.0839s