@RequestMapping映射的规则

叙述

看了官方文档,才知道 @RequestMapping,除了基本的 pattern 映射,有这么多花样玩儿。

解决方案

相同URL,不同方法

Get/Post 请求会分别调用不同的handler方法

@RestController
@RequestMapping("/persons")
class PersonController {

    @GetMapping
    public Person getPerson() {
        // ...
    }

    @PostMapping
    @ResponseStatus(HttpStatus.CREATED)
    public void add(@RequestBody Person person) {
        // ...
    }
}

相同URL,相同方法,不同的请求参数

请求地址都一样: /pets/1?pet=cat ,/pets/1?pet=dog但是请求参数不同,调用的方法就不同

@GetMapping(path = "/pets/{petId}", params = "pet=dog") 
public void dogs(@PathVariable String petId) {
    // ...
}
@GetMapping(path = "/pets/{petId}", params = "pet=cat") 
public void cats(@PathVariable String petId) {
    // ...
}

相同URL,相同方法,不同的header

跟上面的一样,不同的是通过header参数来区分调用接口。而不是请求参数。

@GetMapping(path = "/pets/{petId}", headers= "pet=dog") 
public void dogs(@PathVariable String petId) {
    // ...
}
@GetMapping(path = "/pets/{petId}", headers= "pet=cat") 
public void cats(@PathVariable String petId) {
    // ...
}

相同的URL,但是请求MediaType不同

根据客户端请求体的 ContentType,来区分调用方法

@PostMapping(path = "/pets", consumes = "application/json") 
public void addPet(@RequestBody Pet pet) {
    // ...
}
@PostMapping(path = "/pets", consumes = "application/x-www-form-urlencoded") 
public void addPet(Pet pet) {
    // ...
}

相同的URL,但是响应的MediaType不同

应该是根据客户端的 Accept 头来区分调用方法(客户端比较容易接受什么ContentType的数据类型)

@GetMapping(path = "/pets/{petId}", produces = "application/json") 
@ResponseBody
public Pet getPet(@PathVariable String petId) {
    // ...
}
@GetMapping(path = "/pets/{petId}", produces = "text/plain") 
@ResponseBody
public Pet getPet(@PathVariable String petId) {
    // ...
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值