网站建设 之 post,get参数,@ResponseBody

1494897766027073622.png

一般就这么做,在Spring4.3版本以后,提供了@GetMapping注解更方便了开发,

@RequestMapping和@GetMapping区别

  • @RequestMapping可以指定GET、POST请求方式
  • @GetMapping等价于@RequestMapping的GET请求方式
    //@RequestMapping(value = "hello", method= RequestMethod.GET )
    @GetMapping("hello")
    public String hello() {
       return "hello spring boot";
    }

@GetMapping 在限定使用get请求时候,更为简洁方便

 @GetMapping用于将HTTP get请求映射到特定处理程序的方法注解
具体来说,@GetMapping是一个组合注解,是@RequestMapping(method = RequestMethod.GET)的缩写。

@PostMapping用于将HTTP post请求映射到特定处理程序的方法注解
具体来说,@PostMapping是一个组合注解,是@RequestMapping(method = RequestMethod.POST)的缩写。

注意:通过浏览器的地址栏输入地址,所访问的URL都是get请求

一. 浏览器会发送get请求的情况

  1. 直接在浏览器地址栏输入某个地址
  2. 点击链接
  3. 表单默认的提交方式

二.浏览器会发送post请求的情况

  1. 设置表单method = “post”

三. get请求的特点

  1. 请求参数会添加到URL的后面,只能添加少量参数(因为请求行只有一行,大约只能存放2K左右的数据)

  2. 请求参数会显示在浏览器地址栏,路由器会记录请求地址

四. post请求的特点
1、 请求参数添加到实体内容里面,可以添加大量的参数(也解释了为什么浏览器地址栏不能发送post请求,在地址栏里我们只能填写URL,并不能进入到Http包的实体当中)

2、 相对安全,但是,post请求不会对请求参数进行加密处理(可以使用https协议来保证数据安全)。

先说get的,常规使用姿势是方法的请求参数中有一个HttpServletRequest,我们通过ServletRequest#getParameter(参数名)来获取具体的请求参数,

  
@GetMapping("/req")
public String requestParam(HttpServletRequest httpRequest) {
    Map<String, String[]> ans = httpRequest.getParameterMap();
    return JSON.toJSONString(ans);
}

2. 方法参数

这种解析方式比较厉害了,将GET参数与方法的参数根据参数名进行映射,从感官上来看,就像是直接调用这个一样

  
 缺少一个参数时,为null,多了一个参数,无法被解析,类型不一致,500 
@GetMapping("/arg")
public String argParam(String name, Integer age) {
    return "name: " + name + " age: " + age;
}

大概post也差不多,推荐用第一种,第二种会改变函数头。现在规定参数都是一样的,这样比较好。@RequestMapping 不写method 为get,post方式都支持。

怎么做呢?首先,虽然axios都是post,但是都用request,然后参数是这样的:

HttpSession session, HttpServletRequest request, HttpServletResponse response

然后就这些,参数用map搞出来,怎么搞呢?

  1. String getParameter(String name):通过指定名称获取参数值;
  2. String[] getParameterValues(String name):通过指定名称获取参数值数组,有可能一个名字对应多个值,例如表单中的多个复选框使用相同的name时;
  3. Enumeration getParameterNames():获取所有参数的名字;
  4. Map getParameterMap():获取所有参数对应的Map,其中key为参数名,value为参数值。

说实在的意义不大,算了就这样吧。说实在的为什么呢?我还是觉得之前挺好的。

@ResponseBody的作用
在Controller里面,我们经常可以看到@ResponseBody这个注解,它的意思很简单,就是说明这个方法返回的东西会通过IO流的方式写入到浏览器。

@ResponseBody的作用其实是将java对象转为json格式的数据。将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据。在使用此注解之后不会再走视图处理器,而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据。

@ResponseBody 表示该方法的返回结果直接写入 HTTP response body 中,一般在异步获取数据时使用【也就是AJAX】。在使用 @RequestMapping后,返回值通常解析为跳转路径,但是加上 @ResponseBody 后返回结果不会被解析为跳转路径,而是直接写入 HTTP response body 中。 比如异步获取 json 数据,加上 @ResponseBody 后,会直接返回 json 数据。

因此,一般就是这样:

        // 最终返回的对象

        JSONObject res = new JSONObject();

        res.put("code", 0);

        if (StringUtils.isEmpty(username) || StringUtils.isEmpty(password)) {

            res.put("msg", "error:请输入手机号或密码");

            return res;

        }

        boolean b = userService.check(username, password);

        if (!b){

            res.put("msg", "error:该账号不存在或密码错误");

            return res;

        }

就是如此了。

GET请求是不可以用@RequestBody来接收参数的

在axios中,

get(url[, config])post(url[, data[, config]]),注意参数
get是在config中设置params{params:{...} }
post是设置data字段

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值