springboot-Rest风格请求处理;视图解析器

基本介绍

1.Rest风格支持(使用HTTP请求方式动词来表示对资源的操作)

2.举例说明:

·请求方式:/monster

·GET-获取怪物

·DELETE-删除怪物

·PUT-修改怪物

·POST-保存怪物


代码实现

在Controller里面使用REST风格请求

  • GET请求的两种写法。完整例子:

@RestController
public class MonsterController {

    //@RequestMapping(value="/monster",method = RequestMethod.GET)
    @GetMapping("/monster")
    public String selectMonster(){
        return "GET-Monster请求";
    }
  • POST请求的两种写法

@RequestMapping(value = "/monster",method=RequestMethod.POST)

@PostMapping("/monster")

  • PUT请求的两种写法

@RequestMapping(value = "monster",method = RequestMethod.PUT)

@PutMapping("/monster")

  • DELETE请求的两种写法

@RequestMapping(value = "/monster",method = RequestMethod.DELETE)

@DeleteMapping("/monster")


注意事项和细节

  1. 客户端是PostMan可以直接发送Put、Delete等方式请求,可不设置Filter

  1. 如果要SpringBoot支持页面表单的Rest功能,则需要注意如下细节

a. Rest风格请求核心Filter;HiddenHttpMethodFilter,表单请求会被HiddenHttpMethodFilter拦

截,获取到表单_method的值,再判断是PUT/DELETE/PATCH(老师注释:PATCH方法是新引入的,是

对PUT方法的补充,用来对己知资源进行局部更新:

https://segmentfault.com/q/1010000005685904)

b. 如果要SpringBoot支持页面表单的Rest功能,需要在application.yml启用filter功能,否则无效

  • 前端form只支持get和post两种方式请求,解决办法通常是添加隐藏_method,然后后端通过过滤器来,将原有的post调整为相应的put、delete、patch等请求方式。

    <form action="/spring/monster" method="post">
        <input type="hidden" name="_method" value="delete">//前端隐藏字段设置
        <input type="submit" value="提交">
    </form>
  • 尝试使用postman提交post,参数_method="delete"的方式提交,却失败了。。

c.修改application.yml启用HiddenHttpMethodFilter的filter过滤器功能

spring:
  mvc:#以上重复可删,显式标出是为了体现层次结构
    hiddenmethod: #在行首找这个关键字,即可自动输出层次结构
      filter:
        enabled: true #启用了HiddenHttpMethodFilter,开启页面表单的Rest功能


区分字符串与资源;视图解析器与映射

思考题:为什么这里return "GET-Monster请求",返回的是字符串,而不是转发到对应的资源文件?

  • 解读:因为@ResController是一个复合注解,含有@ResponseBody,所以springboot底层(springmvc),在处理return"xxx"时,会以@ResponseBody注解进行解析处理,即返回字符串"xxx”,而不会使用视图解析器来处理

  • 可以试一下,如果我们把@RestController改成@Controller,当你访问go()时,如果你有xxx.html就会转发到xxx.html,如果没有xxx.html,就会报404

'视图解析器' 与 'controller的RequestMapping映射' 的优先级顺序

  • 程序是通过@Response来确定return返回的是字符串 还是 一个需要视图解析器的页面

  • 当注解是@Controller的时候,说明return返回的是一个页面/资源

  • 没有配置视图解析器的时候,只有与controller的RequestMapping映射进行匹配,没有就显示404;

  • 当配置了视图解析器,无论controller的RequestMapping映射是否匹配,都按照视图解析器的匹配结果进行显示。明显视图解析器的优先级>controller

注意事项:

  • 静态资源是否在target目录下,再次确认,否则出问题。

  • rebuild project的方法感觉消耗资源少一些。还是不行就用maven的clean

  • 需要注意prefix需要和当前static-path-pattern一致

spring:
  mvc:
    static-path-pattern: /prefix/**
    view:
      prefix: /prefix/ #搜索视图解析器的关键词;需要和当前static-path-pattern一致
      suffix: .html    #搜索视图解析器的关键词。配置视图解析器的方法。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值