首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【刨根问底】在Springboot中MVC的常用注解<下>

【刨根问底】在Springboot中MVC的常用注解<下>

作者头像
田维常
发布2019-07-16 10:46:59
发布2019-07-16 10:46:59
6880
举报

@RequestParam

案例:

代码语言:javascript
复制
    @PostMapping("/user/login")
    public String login(@RequestParam("userName") String userName,
                        @RequestParam("password") String password) {
        System.out.println("userName=" + userName);
        System.out.println("password=" + password);
        return "ok";
    }

访问:

http://localhost:9010/user/login?userName=lawt&&password=123456

@RequestParam源码:

代码语言:javascript
复制
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RequestParam {
  //跟name一样的作用,是name属性的一个别名
  @AliasFor("name")
  String value() default "";
  //绑定本次参数的名称,要跟URL上面的一样
  @AliasFor("value")
  String name() default "";
  //这个参数是不是必须的
  boolean required() default true;
  //如果本次请求没有携带这个参数,或者参数为空,那么就会启用默认值
  String defaultValue() default ValueConstants.DEFAULT_NONE;
}

@RequestParam可以多个使用,接收大参数形式:key=value。

注意

如果在后端方法参数前,指定了@RequestParam()的话,那么前端必须要有对应字段才行(当然可以通过设置该注解的required属性来调节是否必须传),否者会报错;如果参数前没有任何该注解,那么前端可以传,也可以不传。

@PathVariable

案例:

代码语言:javascript
复制
    @RequestMapping(value="/user/{id}", method= RequestMethod.GET)
    public User getUser(@PathVariable Integer id) {
        return new User(id,"Java后端技术栈");
    }

访问:

http://localhost:9010//user/10001

返回:

代码语言:javascript
复制
{"userId":10001,"userName":"Java后端技术栈"}

案例:

代码语言:javascript
复制
@RestController
@RequestMapping("/dept/{deptId}")
public class RequestParamDemo {

    @RequestMapping(value = "/user/{id}", method = RequestMethod.GET)
    public User getUser(@PathVariable Integer deptId, 
                       @PathVariable Integer id) {
        System.out.println("deptId="+deptId);
        return new User(id, "Java后端技术栈");
    }
}

访问:

http://localhost:9010/dept/9001/user/10001

上面代码把URI template 中变量 ownerId的值和deptId的值,绑定到方法的参数上。 若方法参数名称和需要绑定的uri template中变量名称不一致,需要在@PathVariable("name")指定uri template中的名称

案例:

代码语言:javascript
复制
@RestController
@RequestMapping("/dept/{deptId}")
public class RequestParamDemo {
    @RequestMapping(value = "/user/{id}", method = RequestMethod.GET)
    public User getUser(@PathVariable Integer deptId, 
             @PathVariable("id") Integer userId) {
        System.out.println("deptId="+deptId);
        return new User(userId, "Java后端技术栈");
    }
}

@PathVariable可以多个使用。

@ResponseBody

案例:

代码语言:javascript
复制
@RestController
public class RequestBodyDemo {
    @RequestMapping(value = "/addUser", method = RequestMethod.POST)
    public User addUser(@RequestBody User user) {
        System.out.println(user);
        return user;
    }
}

接收参数 格式为请求体里的数据,目前主流的是json,所以本文也是使用json,还有就是在请求的时候,得设置:

代码语言:javascript
复制
Content-Type :application/json;charset=UTF-8

@RequestBody接收请求体中的json数据;不加注解接收URL中的数据并组装为对象:

代码语言:javascript
复制
@RestController
public class RequestBodyDemo {
    @RequestMapping(value = "/addUser", method = RequestMethod.POST)
    public User addUser(@RequestBody User user, User user1) {
        System.out.println(user);
        System.out.println(user1);
        return user;
    }
}

测试:

输出:

@RequestBody与复杂的@RequestParam()同时使用:

代码语言:javascript
复制
@RestController
public class RequestBodyDemo {
    @RequestMapping(value = "/addUser", method = RequestMethod.POST)
    public User addUser(@RequestBody User user, 
                        @RequestParam("remark") String remark) {
        System.out.println(user);
        System.out.println("remark=" + remark);
        return user;
    }
}

测试:

结果:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-06-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java后端技术栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档