解析URL常见错误
- @PathVarible 遇到 “/“
一定要注意传递的值里面是否含有 “/“
- @RequestParam, @PathVarible
使用 @RequestParam或者@PathVarible时,要注意有些产线上的编译配置会去掉不是必须的调试信息,此时方式二就不能正常工作了
推荐按照 方式一
//方式一
@RequestMapping(path = "/hi1", method = RequestMethod.GET)
public String hi1(@RequestParam("name") String name) {
return "hi1: " + name;
}
//方式二
@RequestMapping(path = "/hi2", method = RequestMethod.GET)
public String hi2(@RequestParam String name) {
return "hi2: " + name;
}
- 任何一个参数,我们都需要考虑它是可选的还是必须的。同时还需要考虑参数类型的定义到底呢能不能从请求中自动转化。
有三种方式可以将请求参数配置为可选的
指定 注解的
**_defaultValue_**
属性@RequestMapping(path = "/hi5", method = RequestMethod.GET)
public String hi5(@RequestParam("name") String name, @RequestParam( value ="address",defaultValue="杭州") String address){
return name + ":" + address;
};
参数使用 Optional<>包围
//参数使用Optional
@RequestMapping(path = "/hi6", method = RequestMethod.GET)
public String hi6(@RequestParam("name") String name, @RequestParam( value ="address") Optional<String> address){
return name + ":" + address;
};
使用
**_@Nullable_**
注解//@Nullable
@RequestMapping(path = "/hi4", method = RequestMethod.GET)
public String hi4(@RequestParam("name") String name, @Nullable @RequestParam("address") String address){
return name + ":" + address;
};
@Controller
@RestController
@ResponseBody
@RequestParam
@PathVarible
@QueryParam
@PathParam
Spring 解析 Header 常见错误
要完整的接收所有的Header, 不能直接使用Map, 而应该使用 MultiValueMap
//方式 1
@RequestHeader() MultiValueMap map
//方式 2:专用于Header的MultiValueMap子类型
@RequestHeader() HttpHeaders map
Http协议中,Header的名称时无所谓大小写的,但框架实现时可能会严格按照大小写统一处理,实测 都是不分大小写的
- 不是所有的 Header 在响应中都能随意指定,虽然表面上看起来能生效,但最后实际返回给客户端的可能不是我们所期望的值,例如 Tomcat 下,Content_Type 设置 application/json 这种情况