controller方法
2019-07-09 本文已影响0人
xzz4632
1. controller方法请求参数
1.1 请求参数
参数 | 说明 |
---|---|
javax.servlet.ServletRequest, javax.servlet.ServletResponse |
任何特定的请求或响应类型, 如HttpServletRequest,或MultipartHttpServletRequest |
javax.servlet.http.HttpSession |
会话, 这个参数永远不会为null, 它是线程不安全的.如果要允许多个请求并发访问同一个会话, 则要设置RequestMappingHandlerAdapter实例的synchronizeOnSession属性为true. |
javax.servlet.http.PushBuilder |
|
java.security.Principal |
当前经过身份验证的用户 |
HttpMethod |
请求的HTTP方式 |
java.util.Locale |
当前请求所在的区域 |
java.util.TimeZone + java.time.ZoneId |
与当前请求关联的时区 |
@PathVariable |
访问路径URI变量 |
@MatrixVariable |
访问路径中的name-value对. |
@RequestParam |
访问servlet请求参数, 包括文件. |
@RequestHeader |
访问请求头的参数. |
@CookieValue |
访问cookie中的参数 |
@RequestBody |
访问请求body. |
HttpEntity<B> |
访问header和body参数 |
java.util.Map, org.springframework.ui.Model, org.springframework.ui.ModelMap |
用于访问HTML控制器中使用的模型,并作为视图呈现的一部分公开给模板。 |
RedirectAttributes |
重定向时为重定向请求添加请求参数,以及临时存储的flash属性。 |
Errors, BindingResult |
字段验证信息 |
SessionStatus + 类级的@SessionAttributes |
用于标记表单处理完成,这将触发通过类级别@SessionAttributes注释声明的会话属性的清理 |
UriComponentsBuilder |
|
@SessionAttribute |
访问session属性 |
@RequestAttribute |
用于访问请求属性 |
任何其他参数 |
如果是简单类型,将会被@RequestParam解析, 否则将会被@ModelAttribute解析. |
1.2 请求参数部分详解
1.2.1 @MatrixVariable
1.2.1.1 定义
MatrixVariable(矩阵变量)是指出现在请求URI中的name=value
对, 多个用分号
分隔, 多个value值用逗号
分隔或者定义多个name=value
对(name相同). 示例如下:
/cars;color=red,green;year=2012
/cars;color=red;color=green;year=2012
1.2.1.2 启用MatrixVariable:
- Java配置:
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void configurePathMatch(PathMatchConfigurer configurer) {
UrlPathHelper helper = new UrlPathHelper();
helper.setRemoveSemicolonContent(false);
configurer.setUrlPathHelper(helper);
}
}
- xml配置:
<mvc:annotation-driven enable-matrix-variables="true"/>
1.2.1.3 使用
MatrixVariable必须与路径变量(PathVariable)一起使用.
示例1:
// GET /pets/42;q=11;r=22
@GetMapping("/pets/{petId}")
public void findPet(@PathVariable String petId, @MatrixVariable int q) {
// petId == 42
// q == 11
}
示例2: 有多个路径变量
// GET /owners/42;q=11/pets/21;q=22
@GetMapping("/owners/{ownerId}/pets/{petId}")
public void findPet(@MatrixVariable(name="q", pathVar="ownerId") int q1,
@MatrixVariable(name="q", pathVar="petId") int q2) {
// q1 == 11
// q2 == 22
}
示例3:使用MultiValueMap获取所有的矩阵变量
// GET /owners/42;q=11;r=12/pets/21;q=22;s=23
@GetMapping("/owners/{ownerId}/pets/{petId}")
public void findPet(@MatrixVariable MultiValueMap<String, String> matrixVars,
@MatrixVariable(pathVar="petId") MultiValueMap<String, String> petMatrixVars) {
// matrixVars: ["q" : [11,22], "r" : 12, "s" : 23]
// petMatrixVars: ["q" : 22, "s" : 23]
}
2. controller方法返回值
2.1 返回值类型
返回值类型 | 说明 |
---|---|
@ResponseBody |
返回JSON格式 |
HttpEntity<B>, ResponseEntity<B> |
完整响应(包含header和body) |
HttpHeaders |
返回响应header |
String |
视图名称 |
View |
视图实例 |
ModelAndView |
视图对象 |
void |
|
DeferredResult<V> |
异步请求 |
Callbale<V> |
异步请求 |
ListenableFuture<V>, java.util.concurrent.CompletionStage<V>, java.util.concurrent.CompletableFuture<V> |
|
ResponseBodyEmitter, SseEmitter |
|
StreamingResponseBody |
|
Reactive类型 |
|
@JsonView |
Jackson库注解, spring对其提供了内置支持, 提供序列化的视图, 呈现返回对象中所有字段的子集, 与@ResponseBody或ResponseEntity一起使用 |
2.2 使用
2.2.1 @JsonView
它需要Jackson库的支持.
2.2.1.1 定义子集
在返回的对象中定义子集.
public class User {
public interface WithoutPasswordView {};
public interface WithPasswordView extends WithoutPasswordView {};
private String username;
private String password;
public User() {
}
public User(String username, String password) {
this.username = username;
this.password = password;
}
@JsonView(WithoutPasswordView.class)
public String getUsername() {
return this.username;
}
@JsonView(WithPasswordView.class)
public String getPassword() {
return this.password;
}
}
2.1.1.2 在controller方法上指定子集
@GetMapping("/user")
@JsonView(User.WithoutPasswordView.class)
public User getUser() {
return new User("eric", "7!jd#h23");
}