有关 RequestMapping 注解的一些事(二)


5、Consumable Media Types

可以在 Mapping 中加入 consumes 条件来声明 Controller 可以被接受的媒体类型(media type)—— 也就是首部中的 Content-Type

@PostMapping(path = "/pets", consumes = "application/json") 
public void addPet(@RequestBody Pet pet, Model model) { 
  // implementation omitted 
}

注意: 方法级上的 consumes 条件会覆盖类级别上的 consumes 条件。

6、Producible Media Types

可以在 Mapping 中加入 produces 条件声明 Controller 生成的媒体类型 —— 只有首部中的 Accept 符合条件的才会被映射:

@GetMapping(path = "/pets/{petId}", produces = MediaType.APPLICATION_JSON_UTF8_VALUE) 
@ResponseBody 
public Pet getPet(@PathVariable String petId, Model model) { 
  // implementation omitted 
}

7、请求参数和首部

可以在 @RequestMapping 中加入请求参数(params)来缩小请求的匹配范围:

@Controller 
@RequestMapping("/owners/{ownerId}") 
public class RelativePathUriTemplateController {
  @GetMapping(path = "/pets/{petId}", params = "myParam=myValue") 
  public void findPet(@PathVariable String ownerId, @PathVariable String petId, Model model) { 
    // implementation omitted 
  }
}

同样,可以在 @RequestMapping 中加入首部(headers)来缩小请求的匹配范围:

@Controller 
@RequestMapping("/owners/{ownerId}") 
public class RelativePathUriTemplateController {
  @GetMapping(path = "/pets", headers = "myHeader=myValue") 
  public void findPet(@PathVariable String ownerId, @PathVariable String petId, Model model) { 
    // implementation omitted 
  }
}