SpringMVC(三)获取控制器参数

版权声明:From Lay https://blog.csdn.net/Sadlay/article/details/84034259

SpringMVC获取控制器参数

在无注解下获取参数

在没有注解的情况下,SpringMVC也可以获取参数,且参数允许为空,唯一的要求是参数名称和HTTP请求的参数名称保持一致。

package com.lay.mvc.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.HashMap;
import java.util.Map;

@RequestMapping("my")
@Controller
public class ParamController {
    /**
     * 在无注解下获取参数,要求参数名称和HTTP请求参数名称一致
     * @param intVal
     * @param longVal
     * @param str
     * @return 响应JSON参数
     */
    @GetMapping("/no/annotation")
    @ResponseBody
    public Map<String,Object> noAnnotation (Integer intVal,Long longVal,String str) {
        Map<String,Object> paramMap=new HashMap<>();
        paramMap.put("intVal",intVal);
        paramMap.put("longVal",longVal);
        paramMap.put("str",str);
        return paramMap;
    }
}

测试

http://localhost:8080/my/no/annotation?intVal=10&longVal=200&str=12321

结果

{"str":"12321","intVal":10,"longVal":200}

使用@RequestParam获取参数

在无需注解的情况下,要求HTTP参数和控制器的方法参数保持一致。然后在前后端分离的趋势下,前端的命名规则可能与后端不同,这是需要把前端妈的参数与后端对应起来。SpringMVC提供了注解@RequestParam来确定前后端参数名称的映射关系。

    /**
     *
     * @Description:通过注解获取参数
     * @param: intVal, longVal, strVal
     * @return: java.util.Map<java.lang.String,java.lang.Object>
     * @auther: lay
     * @date: 14:14 2018/11/13
     */
    @GetMapping("annotation")
    @ResponseBody
    public Map<String,Object> annotation(
            @RequestParam("int_val") Integer intVal,
            @RequestParam("long_val") Long longVal,
            @RequestParam(value = "str_val",required = false) String strVal){
        Map<String,Object> paramMap=new HashMap<>();
        paramMap.put("intVal",intVal);
        paramMap.put("longVal",longVal);
        paramMap.put("str",strVal);
        return paramMap;
    }

在默认情况下@RequestParam标注的参数是不能为空的,如果允许为空可以修改为@RequestParam(value = "str_val",required = false)

测试http://localhost:8080/my/no/annotation?intVal=10&longVal=200

传递数组

SpringMVC内部已经支持用都逗号分隔的数组参数

 /**
     *
     * @Description: 传递数组
     * @param: [intArr, longArr, strArr]
     * @return: java.util.Map<java.lang.String,java.lang.Object>
     * @auther: lay
     * @date: 14:21 2018/11/13
     */
    @GetMapping("/requestArray")
    @ResponseBody
    public Map<String,Object> requestArray(
            int[] intArr,Long[] longArr,String[] strArr){
        Map<String,Object> paramMap=new HashMap<>();
        paramMap.put("intVal",intArr);
        paramMap.put("longVal",longArr);
        paramMap.put("str",strArr);
        return paramMap;
    }

测试http://localhost:8080/my/requestArray?intArr=1,2,3&longArr=2222,3334,1&strArr=hello,world

返回

{"str":["hello","world"],"intVal":[1,2,3],"longVal":[2222,3334,1]}

传递JSON

前端有时候需要提交较为复杂的数据到后端,为了更好组织和提高代码的可读性,可以将数据转换为JSON数据集,通过HTTP请求体提交给后端。

示例:新增人员

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">

<head>
    <meta charset="UTF-8">
    <meta charset="UTF-8">
    <title>用户新增</title>
    <link rel="stylesheet" type="text/css" href="https://www.jeasyui.com/easyui/themes/default/easyui.css">
    <link rel="stylesheet" type="text/css" href="https://www.jeasyui.com/easyui/themes/icon.css">
    <link rel="stylesheet" type="text/css" href="https://www.jeasyui.com/easyui/themes/color.css">
    <link rel="stylesheet" type="text/css" href="https://www.jeasyui.com/easyui/demo/demo.css">
    <script type="text/javascript" src="https://code.jquery.com/jquery-1.9.1.min.js"></script>
    <script type="text/javascript" src="https://www.jeasyui.com/easyui/jquery.easyui.min.js"></script>
    <script type="text/javascript">
        $(document).ready(function () {
            $("#submit").click(function () {
                var personName = $("#personName").val();
                var note = $("#note").val();
                if ($.trim(personName) == "") {
                    alert("用户名不能为空!");
                    return;
                }
                var params = {
                    personName: personName,
                    sex:"0",
                    note: note
                };


                $.ajax({
                    url: "../person/insert",
                    //告知传递参数类型为json,不可缺少
                    type:"post",
                    contentType:"application/json",
                    //将json转化为字符串传递
                    data: JSON.stringify(params),
                    //dataType:"text",
                    //成功后得方法
                    success: function (result) {
                        if (result == null || result.id == null) {
                            alert("插入失败");
                            return;
                        }
                        alert("插入成功");
                    }
                });
            });
        });
    </script>
</head>
<body>
<div style="margin: 20px 0;"></div>
<form id="insertForm">
    <table>
        <tr>
            <td>用户名称</td>
            <td><input id="personName" name="personName"></td>
        </tr>
        <tr>
            <td>备注</td>
            <td><input id="note" name="note"></td>
        </tr>
        <tr>
            <td></td>
            <td align="right"><input id="submit" type="button" value="提交"></td>
        </tr>
    </table>
</form>
</body>
</html>

后台

    @RequestMapping("/insert")
    @ResponseBody
    public Person insert(@RequestBody Person person) {
        personService.insertPerson(person);
        return person;
    }

通过URL传递参数

在一些REST风格的网站中,参数往往通过URL进行传递。

例如获得编号为1的用户,URL就要写为/person/1,这里的1代表的是人员编号(id)。SpringMVC可以通过处理器映射和注解@PathVariable的组合获取URL参数。

    /**
     *
     * @Description: 通过URL获得参数
     * @param: [id]
     * @return: com.lay.mvc.entity.Person
     * @auther: lay
     * @date: 14:34 2018/11/13
     */
    //{...}代表占位符,还可以配置参数名称
    @GetMapping("/{id}")
    @ResponseBody
    public Person get(@PathVariable("id") Long id){
        return personService.getPerson(id);
    }

测试http://localhost:8080/my/1

获取格式化参数

格式日期和货币

页面

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">

<head>
    <meta charset="UTF-8">
    <meta charset="UTF-8">
    <title>格式化</title>
</head>
<body>
<form action="./commit" method="post">
    <table>
        <tr>
            <td>日期</td>
            <td>
                <input type="text" name="date" value="2018-11-13">
            </td>
        </tr>
        <tr>
            <td>金额</td>
            <td>
                <input type="text" name="number" value="1,234,567.89">
            </td>
        </tr>
        <tr>
            <td colspan="2"align="right">
                <input type="submit" value="提交">
            </td>
        </tr>
    </table>
</form>
</body>
</html>

后台

//映射页面
@GetMapping("/format/form")
public String showFormat(){
    return "/format/formatter";
}
//获取提交参数
@PostMapping("/format/commit")
@ResponseBody
public Map<String,Object> format(
        @DateTimeFormat(iso= DateTimeFormat.ISO.DATE)Date date,
        @NumberFormat(pattern = "#,###.##") Double number){
    Map<String,Object> dataMap=new HashMap<>();
    dataMap.put("date",date);
    dataMap.put("number",number);
    return dataMap;
}

猜你喜欢

转载自blog.csdn.net/Sadlay/article/details/84034259