controller方法

作者: xzz4632 | 来源:发表于2019-07-09 16:43 被阅读0次

    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");
        }
    

    相关文章

      网友评论

        本文标题:controller方法

        本文链接:https://www.haomeiwen.com/subject/wppxkctx.html