zoukankan      html  css  js  c++  java
  • 测试开发进阶——spring boot——MVC——@RequestMapping 和 @GetMapping 和@PostMapping 区别

    Spring4.3中引进了{@GetMapping、@PostMapping、@PutMapping、@DeleteMapping、@PatchMapping}

    来帮助简化常用的HTTP方法的映射 并更好地表达被注解方法的语义 

    该注解将HTTP Get 映射到 特定的处理方法上

    @GetMapping是一个组合注解 是@RequestMapping(method = RequestMethod.GET)的缩写

    @PostMapping是一个组合注解 是@RequestMapping(method = RequestMethod.POST)的缩写

    @RequestMapping

    RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。

    RequestMapping注解有六个属性,下面我们把她分成三类进行说明。

    1、 value, method;

    value:     指定请求的实际地址,指定的地址可以是URI Template 模式(后面将会说明);

    method:  指定请求的method类型, GET、POST、PUT、DELETE等;

    2、 consumes,produces;

    consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;

    produces:    指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;

    3、 params,headers;

    params: 指定request中必须包含某些参数值是,才让该方法处理。

    headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求。

    ===================================================================

    ===================================================================

    @RequestMapping 源码

    /*
     * Copyright 2002-2018 the original author or authors.
     *
     * Licensed under the Apache License, Version 2.0 (the "License");
     * you may not use this file except in compliance with the License.
     * You may obtain a copy of the License at
     *
     *      http://www.apache.org/licenses/LICENSE-2.0
     *
     * Unless required by applicable law or agreed to in writing, software
     * distributed under the License is distributed on an "AS IS" BASIS,
     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     * See the License for the specific language governing permissions and
     * limitations under the License.
     */
    
    package org.springframework.web.bind.annotation;
    
    import java.lang.annotation.Documented;
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    
    import org.springframework.core.annotation.AliasFor;
    
    /**
     * Annotation for mapping web requests onto methods in request-handling classes
     * with flexible method signatures.
     *
     * <p>Both Spring MVC and Spring WebFlux support this annotation through a
     * {@code RequestMappingHandlerMapping} and {@code RequestMappingHandlerAdapter}
     * in their respective modules and package structure. For the exact list of
     * supported handler method arguments and return types in each, please use the
     * reference documentation links below:
     * <ul>
     * <li>Spring MVC
     * <a href="https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#mvc-ann-arguments">Method Arguments</a>
     * and
     * <a href="https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#mvc-ann-return-types">Return Values</a>
     * </li>
     * <li>Spring WebFlux
     * <a href="https://docs.spring.io/spring/docs/current/spring-framework-reference/web-reactive.html#webflux-ann-arguments">Method Arguments</a>
     * and
     * <a href="https://docs.spring.io/spring/docs/current/spring-framework-reference/web-reactive.html#webflux-ann-return-types">Return Values</a>
     * </li>
     * </ul>
     *
     * <p><strong>Note:</strong> This annotation can be used both at the class and
     * at the method level. In most cases, at the method level applications will
     * prefer to use one of the HTTP method specific variants
     * {@link GetMapping @GetMapping}, {@link PostMapping @PostMapping},
     * {@link PutMapping @PutMapping}, {@link DeleteMapping @DeleteMapping}, or
     * {@link PatchMapping @PatchMapping}.</p>
     *
     * <p><b>NOTE:</b> When using controller interfaces (e.g. for AOP proxying),
     * make sure to consistently put <i>all</i> your mapping annotations - such as
     * {@code @RequestMapping} and {@code @SessionAttributes} - on
     * the controller <i>interface</i> rather than on the implementation class.
     *
     * @author Juergen Hoeller
     * @author Arjen Poutsma
     * @author Sam Brannen
     * @since 2.5
     * @see GetMapping
     * @see PostMapping
     * @see PutMapping
     * @see DeleteMapping
     * @see PatchMapping
     * @see org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter
     * @see org.springframework.web.reactive.result.method.annotation.RequestMappingHandlerAdapter
     */
    @Target({ElementType.METHOD, ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Mapping
    public @interface RequestMapping {
    
    	/**
    	 * Assign a name to this mapping.
    	 * <p><b>Supported at the type level as well as at the method level!</b>
    	 * When used on both levels, a combined name is derived by concatenation
    	 * with "#" as separator.
    	 * @see org.springframework.web.servlet.mvc.method.annotation.MvcUriComponentsBuilder
    	 * @see org.springframework.web.servlet.handler.HandlerMethodMappingNamingStrategy
    	 */
    	String name() default "";
    
    	/**
    	 * The primary mapping expressed by this annotation.
    	 * <p>This is an alias for {@link #path}. For example
    	 * {@code @RequestMapping("/foo")} is equivalent to
    	 * {@code @RequestMapping(path="/foo")}.
    	 * <p><b>Supported at the type level as well as at the method level!</b>
    	 * When used at the type level, all method-level mappings inherit
    	 * this primary mapping, narrowing it for a specific handler method.
    	 */
    	@AliasFor("path")
    	String[] value() default {};
    
    	/**
    	 * The path mapping URIs (e.g. "/myPath.do").
    	 * Ant-style path patterns are also supported (e.g. "/myPath/*.do").
    	 * At the method level, relative paths (e.g. "edit.do") are supported
    	 * within the primary mapping expressed at the type level.
    	 * Path mapping URIs may contain placeholders (e.g. "/${connect}").
    	 * <p><b>Supported at the type level as well as at the method level!</b>
    	 * When used at the type level, all method-level mappings inherit
    	 * this primary mapping, narrowing it for a specific handler method.
    	 * @see org.springframework.web.bind.annotation.ValueConstants#DEFAULT_NONE
    	 * @since 4.2
    	 */
    	@AliasFor("value")
    	String[] path() default {};
    
    	/**
    	 * The HTTP request methods to map to, narrowing the primary mapping:
    	 * GET, POST, HEAD, OPTIONS, PUT, PATCH, DELETE, TRACE.
    	 * <p><b>Supported at the type level as well as at the method level!</b>
    	 * When used at the type level, all method-level mappings inherit
    	 * this HTTP method restriction (i.e. the type-level restriction
    	 * gets checked before the handler method is even resolved).
    	 */
    	RequestMethod[] method() default {};
    
    	/**
    	 * The parameters of the mapped request, narrowing the primary mapping.
    	 * <p>Same format for any environment: a sequence of "myParam=myValue" style
    	 * expressions, with a request only mapped if each such parameter is found
    	 * to have the given value. Expressions can be negated by using the "!=" operator,
    	 * as in "myParam!=myValue". "myParam" style expressions are also supported,
    	 * with such parameters having to be present in the request (allowed to have
    	 * any value). Finally, "!myParam" style expressions indicate that the
    	 * specified parameter is <i>not</i> supposed to be present in the request.
    	 * <p><b>Supported at the type level as well as at the method level!</b>
    	 * When used at the type level, all method-level mappings inherit
    	 * this parameter restriction (i.e. the type-level restriction
    	 * gets checked before the handler method is even resolved).
    	 * <p>Parameter mappings are considered as restrictions that are enforced at
    	 * the type level. The primary path mapping (i.e. the specified URI value)
    	 * still has to uniquely identify the target handler, with parameter mappings
    	 * simply expressing preconditions for invoking the handler.
    	 */
    	String[] params() default {};
    
    	/**
    	 * The headers of the mapped request, narrowing the primary mapping.
    	 * <p>Same format for any environment: a sequence of "My-Header=myValue" style
    	 * expressions, with a request only mapped if each such header is found
    	 * to have the given value. Expressions can be negated by using the "!=" operator,
    	 * as in "My-Header!=myValue". "My-Header" style expressions are also supported,
    	 * with such headers having to be present in the request (allowed to have
    	 * any value). Finally, "!My-Header" style expressions indicate that the
    	 * specified header is <i>not</i> supposed to be present in the request.
    	 * <p>Also supports media type wildcards (*), for headers such as Accept
    	 * and Content-Type. For instance,
    	 * <pre class="code">
    	 * @RequestMapping(value = "/something", headers = "content-type=text/*")
    	 * </pre>
    	 * will match requests with a Content-Type of "text/html", "text/plain", etc.
    	 * <p><b>Supported at the type level as well as at the method level!</b>
    	 * When used at the type level, all method-level mappings inherit
    	 * this header restriction (i.e. the type-level restriction
    	 * gets checked before the handler method is even resolved).
    	 * @see org.springframework.http.MediaType
    	 */
    	String[] headers() default {};
    
    	/**
    	 * The consumable media types of the mapped request, narrowing the primary mapping.
    	 * <p>The format is a single media type or a sequence of media types,
    	 * with a request only mapped if the {@code Content-Type} matches one of these media types.
    	 * Examples:
    	 * <pre class="code">
    	 * consumes = "text/plain"
    	 * consumes = {"text/plain", "application/*"}
    	 * </pre>
    	 * Expressions can be negated by using the "!" operator, as in "!text/plain", which matches
    	 * all requests with a {@code Content-Type} other than "text/plain".
    	 * <p><b>Supported at the type level as well as at the method level!</b>
    	 * When used at the type level, all method-level mappings override
    	 * this consumes restriction.
    	 * @see org.springframework.http.MediaType
    	 * @see javax.servlet.http.HttpServletRequest#getContentType()
    	 */
    	String[] consumes() default {};
    
    	/**
    	 * The producible media types of the mapped request, narrowing the primary mapping.
    	 * <p>The format is a single media type or a sequence of media types,
    	 * with a request only mapped if the {@code Accept} matches one of these media types.
    	 * Examples:
    	 * <pre class="code">
    	 * produces = "text/plain"
    	 * produces = {"text/plain", "application/*"}
    	 * produces = MediaType.APPLICATION_JSON_UTF8_VALUE
    	 * </pre>
    	 * <p>It affects the actual content type written, for example to produce a JSON response
    	 * with UTF-8 encoding, {@link org.springframework.http.MediaType#APPLICATION_JSON_UTF8_VALUE} should be used.
    	 * <p>Expressions can be negated by using the "!" operator, as in "!text/plain", which matches
    	 * all requests with a {@code Accept} other than "text/plain".
    	 * <p><b>Supported at the type level as well as at the method level!</b>
    	 * When used at the type level, all method-level mappings override
    	 * this produces restriction.
    	 * @see org.springframework.http.MediaType
    	 */
    	String[] produces() default {};
    
    }
    

      

    @GetMapping 源码

    /*
     * Copyright 2002-2016 the original author or authors.
     *
     * Licensed under the Apache License, Version 2.0 (the "License");
     * you may not use this file except in compliance with the License.
     * You may obtain a copy of the License at
     *
     *      http://www.apache.org/licenses/LICENSE-2.0
     *
     * Unless required by applicable law or agreed to in writing, software
     * distributed under the License is distributed on an "AS IS" BASIS,
     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     * See the License for the specific language governing permissions and
     * limitations under the License.
     */
    
    package org.springframework.web.bind.annotation;
    
    import java.lang.annotation.Documented;
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    
    import org.springframework.core.annotation.AliasFor;
    
    /**
     * Annotation for mapping HTTP {@code GET} requests onto specific handler
     * methods.
     *
     * <p>Specifically, {@code @GetMapping} is a <em>composed annotation</em> that
     * acts as a shortcut for {@code @RequestMapping(method = RequestMethod.GET)}.
     *
     *
     * @author Sam Brannen
     * @since 4.3
     * @see PostMapping
     * @see PutMapping
     * @see DeleteMapping
     * @see PatchMapping
     * @see RequestMapping
     */
    @Target(ElementType.METHOD)
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @RequestMapping(method = RequestMethod.GET)
    public @interface GetMapping {
    
    	/**
    	 * Alias for {@link RequestMapping#name}.
    	 */
    	@AliasFor(annotation = RequestMapping.class)
    	String name() default "";
    
    	/**
    	 * Alias for {@link RequestMapping#value}.
    	 */
    	@AliasFor(annotation = RequestMapping.class)
    	String[] value() default {};
    
    	/**
    	 * Alias for {@link RequestMapping#path}.
    	 */
    	@AliasFor(annotation = RequestMapping.class)
    	String[] path() default {};
    
    	/**
    	 * Alias for {@link RequestMapping#params}.
    	 */
    	@AliasFor(annotation = RequestMapping.class)
    	String[] params() default {};
    
    	/**
    	 * Alias for {@link RequestMapping#headers}.
    	 */
    	@AliasFor(annotation = RequestMapping.class)
    	String[] headers() default {};
    
    	/**
    	 * Alias for {@link RequestMapping#consumes}.
    	 * @since 4.3.5
    	 */
    	@AliasFor(annotation = RequestMapping.class)
    	String[] consumes() default {};
    
    	/**
    	 * Alias for {@link RequestMapping#produces}.
    	 */
    	@AliasFor(annotation = RequestMapping.class)
    	String[] produces() default {};
    
    }
    

      

  • 相关阅读:
    matlab中size函数总结
    sudo apt-get install ubuntu-desktop, Error: unable to locate package
    java打包打包
    java2exe exe4j crack
    java程序换图标
    jQuery学习——CSS
    jQuery学习——属性
    jQuery学习——表单
    jQuery学习——内容筛选&可见性筛选
    jQuery学习——基本筛选
  • 原文地址:https://www.cnblogs.com/xiaobaibailongma/p/15097031.html
Copyright © 2011-2022 走看看