【SpringBoot】SpringBoot Controller接收参数的常用方式

在Controller中加入@RestController,效果等于@Controller + @ResponseBody

1 请求路径参数

直接把表单里面的参数写进 Controller 相应方法的形参中去,这个获取参数的方法适合get提交,而不适合post提交。

  • @PathVariable获取(这个当然不分get和post了,是url提取嘛)
    @RequestMapping("/userInfo/{id}")
    public String userInfo(@PathVariable String id) {
        System.out.println(id);
        return id;
    }
http://localhost:8080/userInfo/142857
  • @RequestParam获取查询参数,如url?id=1428571
    • 当请求参数名与方法形参变量名相同时,可不加@RequestParam注解
    • @RequestParam注解的required属性默认为true,若参数不是必须传递需改为false
    @RequestMapping("/userInfo")
    public String userInfo(@RequestParam(name = "id") String id) {
        System.out.println(id);
        return id;
    }
http://localhost:8080/userInfo?id=12345671

2 实体参数

通过建立一个bean来获取参数:

package com.example.helloworld.model;

public class User {
    private String id;
    private String name;
    private Notebook notebook;

    User(String id, String name) {
        this.id  = id;
        this.name = name;
        this.notebook = new Notebook();
    }

    public String getName() {
        return name;
    }
}

	@RequestMapping("/userInfo")
    public String userInfo(User user) {
        System.out.println(user.getName());
        return user.getName();
    }
http://localhost:8080/userInfo?id=12345671&name=xiaokou

3 日期参数

http://localhost:8080/problemBook?id=142857&time=2022-01-01 00:00:00
@RequestMapping("/problemBook")
    public String problemBook(String id, @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime time) {
        System.out.println(id);
        System.out.println(time);
        return "OK";
    }

但“yyyy-MM-dd”就识别有问题……

4 Json Body参数

通常用于Post请求。

【SpringBoot】SpringBoot Controller接收参数的常用方式_第1张图片

使用RequestBody注解。

	@PostMapping("/finishProblem")
    public String finishProblem(@RequestBody User user) {
        System.out.println(user.getName());
        return "OK";
    }

也可以使用一个map接收:

    @PostMapping("/finishProblem")
    public String finishProblem(@RequestBody Map<String, String> params) {
        System.out.println(params.get("uid"));
        System.out.println(params.get("problemId"));
        return "OK";
    }

5 返回结果

@ResponseBody用于Controller类或者方法上,将方法返回值直接响应,若返回值类型是实体对象或者集合,将转为json格式相应。

为了有统一的返回方式,定义统一响应结果Result

package com.example.helloworld.controller;


/**
 * code response状态码
 * obj 返回给前端的数据
 * message 附加信息,说明具体情况
 */

public class Result {
    public int code;
    public String message;
    public Object data;

    public Result(int code, String message, Object data) {
        this.code = code;
        this.message = message;
        this.data = data;
    }

    public static Result success(Object data) {
        return new Result(200, "success", data);
    }

    public static Result success() {
        return new Result(200, "success", null);
    }

    public static Result error(String message) {
        return new Result(404, message, null);
    }
}

你可能感兴趣的:(Java,spring,boot,java,spring)