解析URL常见错误

  1. @PathVarible 遇到 “/“

一定要注意传递的值里面是否含有 “/“

  1. @RequestParam, @PathVarible

使用 @RequestParam或者@PathVarible时,要注意有些产线上的编译配置会去掉不是必须的调试信息,此时方式二就不能正常工作了
推荐按照 方式一

  1. //方式一
  2. @RequestMapping(path = "/hi1", method = RequestMethod.GET)
  3. public String hi1(@RequestParam("name") String name) {
  4. return "hi1: " + name;
  5. }
  6. //方式二
  7. @RequestMapping(path = "/hi2", method = RequestMethod.GET)
  8. public String hi2(@RequestParam String name) {
  9. return "hi2: " + name;
  10. }


  1. 任何一个参数,我们都需要考虑它是可选的还是必须的。同时还需要考虑参数类型的定义到底呢能不能从请求中自动转化

有三种方式可以将请求参数配置为可选的

  • 指定 注解的 **_defaultValue_** 属性

    1. @RequestMapping(path = "/hi5", method = RequestMethod.GET)
    2. public String hi5(@RequestParam("name") String name, @RequestParam( value ="address",defaultValue="杭州") String address){
    3. return name + ":" + address;
    4. };
  • 参数使用 Optional<>包围

    1. //参数使用Optional
    2. @RequestMapping(path = "/hi6", method = RequestMethod.GET)
    3. public String hi6(@RequestParam("name") String name, @RequestParam( value ="address") Optional<String> address){
    4. return name + ":" + address;
    5. };
  • 使用 **_@Nullable_** 注解

    1. //@Nullable
    2. @RequestMapping(path = "/hi4", method = RequestMethod.GET)
    3. public String hi4(@RequestParam("name") String name, @Nullable @RequestParam("address") String address){
    4. return name + ":" + address;
    5. };

@Controller
@RestController
@ResponseBody
@RequestParam
@PathVarible
@QueryParam
@PathParam

Spring 解析 Header 常见错误

  1. 要完整的接收所有的Header, 不能直接使用Map, 而应该使用 MultiValueMap

    1. //方式 1
    2. @RequestHeader() MultiValueMap map
    3. //方式 2:专用于Header的MultiValueMap子类型
    4. @RequestHeader() HttpHeaders map
  2. Http协议中,Header的名称时无所谓大小写的,但框架实现时可能会严格按照大小写统一处理,实测 都是不分大小写的


  1. 不是所有的 Header 在响应中都能随意指定,虽然表面上看起来能生效,但最后实际返回给客户端的可能不是我们所期望的值,例如 Tomcat 下,Content_Type 设置 application/json 这种情况