@ RequestMapping, @ RequsetBody 등 설명

7705 단어
@ RequestMapping, @ RequestBody 의 주해 사용
현재 주류 웹 개발 프레임 워 크 는 바로 springMVC 에 속 하 는데 그 이 유 는 SpringMVC 가 백 스테이지 의 데 이 터 를 다양한 유형의 데이터 로 쉽게 전환 시 켜 모 바 일 인터넷 의 데이터 다양화 변화 요구 에 잘 적응 하기 때문이다.예 를 들 어 데 이 터 를 우리 가 자주 사용 하 는 제 이 슨 데이터 세트 로 쉽게 전환 할 수 있 고 엑셀, PDF, XML 등의 데이터 세트 로 전환 할 수 있다.springboot 의 발전 에 따라 주해 개발 은 개발 속도 가 빠 르 고 컴 파일 기간 에 잘못된 출처 를 발견 하기 쉬 우 며 주해 개발 은 이미 추세 가 되 었 다.이 박문 은 srpingboot 아래 의 springmvc 주 해 를 바탕 으로 정리 되 었 으 며, 아래 의 모든 코드 테스트 는 springboot 를 바탕 으로 구축 되 었 다.
springMVC 작업 흐름 도
구체 적 인 주해 사용 을 알 기 전에 springMVC 의 작업 절차 와 작업 순서 도 를 알 아 보 는 것 이 필요 하 다.
설명: 현재 대부분의 항목 이 앞 뒤 가 분리 되 어 있 기 때문에 대부분의 경우 백 엔 드 는 지정 한 JSon 데이터 세트 만 전달 하면 됩 니 다. 따라서 이곳 의 springmvc 프로 세 스 그림 의 보 기 는 json 보 기 를 기반 으로 합 니 다.
springMvc 의 순서 도 는 다음 과 같다.
srpingmvc 에서 웹 요청 을 처리 하 는 순서 그림
@ RequestMapping 주해 사용
  • 역할: 웹 의 요청 경 로 를 하나의 클래스 나 방법 에 유연 한 방법 으로 표시 합 니 다.일반적으로 클래스 에 매 핑 되 며, 방법 에 있어 서 는 그의 변 체 된 네 개의 주 해 를 사용 합 니 다. @ GetMapping @ PostMapping @ PutMapping, @ DeleteMapping 은 서로 다른 요청 유형 을 여러 번 더 잘 구별 합 니 다.
  • 주요 속성: 소스 코드 를 통 해 알 수 있 는 속성 은 다음 과 같다.
     @Target({ElementType.TYPE, ElementType.METHOD})
     @Retention(RetentionPolicy.RUNTIME)
     @Documented
     @Mapping
     public @interface RequestMapping {
    
    //         
    String name() default "";
    
        //       
    @AliasFor("path")
    String[] value() default {};
    
        //        path    
    @AliasFor("value")
    String[] path() default {};
    
        //     HTTP     ,GET,POST,HEAD,OPPTIONS,PUT,TRACE 
        //          
    RequestMethod[] method() default {};
    
       //    http   ,      
     String[] params() default {};
    
     //                
      String[] headers() default {};
    
     //   HTTP        , "application/json","text/html"
     String[] consumes() default {};
    
         //          ,  HTTP      (Accept)              
     String[] produces() default {};
    
         }
    
  • 자주 사용 하 는 속성 은 value 와 path 두 속성 입 니 다. 이 두 속성 은 경 로 를 설정 합 니 다. 물론 method 속성 으로 HTTP 요청 형식 을 설정 할 수도 있 습 니 다.
  • 사용 예시
  • 테스트 클래스 작성
     //   
     @Controller
     @RequestMapping("/my")
     public class UserController {
    
       /**
       *     
       * @return  json      
        */
     @RequestMapping("/getuser")
     @ResponseBody
     public User getUser(){
       User user = new User();
       user.setId(1);
       user.setName("chenw1024");
       return user;
      }
    
    }
  • 2. 테스트
              http://localhost:8080/my/getuser
    

    브 라 우 저가 사용자 의 정 보 를 보 여 주 는 것 을 볼 수 있다.여기 주석 이 하나 더 사 용 됐 기 때 문 입 니 다.주로 서버 의 응답 결 과 를 되 돌려 줍 니 다.
    @ ReponseBody 주석
  • 주요 역할: 서버 응답 결 과 를 json 데이터 세트 형식 으로 클 라 이언 트 에 게 되 돌려 주 는 것 이다.웹 응답 체 에 방법의 반환 값 을 연결 하 는 것 입 니 다.상기 예 를 들 어 사용자 의 정 보 를 클 라 이언 트 에 되 돌려 줍 니 다. 현재 이 @ Response Body 를 주석 하면 어떻게 될 까요
     @RequestMapping("/getuser")
     //  @ResponseBody
    public User getUser(){
      User user = new User();
      user.setId(1);
      user.setName("chenw1024");
      return user;
    
    } 재 테스트 를 통 해 요청 을 찾 을 수 없습니다.
  • @ Response Body 라 는 주해 의 원본 코드 를 보 세 요.
         @Target({ElementType.TYPE, ElementType.METHOD})
         @Retention(RetentionPolicy.RUNTIME)
         @Documented
        public @interface ResponseBody {
    
        }
    

    원본 코드 에서 알 수 있 듯 이 이 주 해 는 속성 이 없 지만 자주 사용 합 니 다.일반적으로 방법 에 응용 된다.
    @ RequestParm 주석
  • 역할: 앞 뒤 엔 드 매개 변수 이름 의 매 핑 관 계 를 확인 합 니 다. 즉, 전단 과 백 엔 드 의 매개 변 수 를 대응 하 는 것 입 니 다.간단 한 예 보다 한 사람 이 집에 있 는 작은 이름 은 개 알 이 고 회사 에 있 는 이름 은 이사 이다.어느 날, 이사 의 친 구 는 회사 에 이 사 를 찾 아 갔 습 니 다. 이사 의 작은 이름 인 개 알 을 알 고 있 었 습 니 다. 회 사 는 개 알 이 누 군지 몰 랐 습 니 다. 이때 마침 이사 와 동료 인 샤 오 허 였 습 니 다. 그 는 이사 가 개 알 이 고 개 알 이 이사 라 는 것 을 알 고 이 사 를 찾 아 주 었 습 니 다.이곳 의 작은 것 이 바로 @ RequestParm 입 니까?
  • 속성 은 소스 코드 를 통 해 설명 한다.
       public @interface RequestParam {
    
    //        
    @AliasFor("name")
    String value() default "";
    
    //       ,             
    @AliasFor("value")
    String name() default "";
    
        //         ,   true                 ,
    boolean required() default true;
    
       //             ,        
       String defaultValue() default ValueConstants.DEFAULT_NONE;
    
        }
    
  • 자주 사용 하 는 속성 은 value 속성 과 required 입 니 다.
  • 사용 사례
      /*
        * @param id
        * @param name
        * @return
        */
        @RequestMapping("/annotation")
        @ResponseBody
        public Map getParmm(@RequestParam("user_id") int id,
        @RequestParam("user_name") String name,@RequestParam(value = "note",required = false)String note){
    
        Map map = new HashMap<>();
        map.put("id",id);
        map.put("name",name);
        map.put("note",note);
        return map;
        }
    
  • user_id,user_name, note 이것 은 전단 의 매개 변수 입 니 다. @ RequestParm 을 통 해 해당 하 는 방법 에 비 치 는 매개 변수 입 니 다.
  • 테스트
             http://localhost:8080/my/annotation?user_id=3&user_name=chen&note=hello
    
  • 테스트 결과:
    테스트 성공
    가끔 은 우리 가 모든 매개 변 수 를 전달 할 필요 가 없 을 수도 있 습 니 다. 여기 서 우리 가 두 개의 매개 변수 만 전달 하면 어떻게 될 까요?
             : http://localhost:8080/my/annotation?user_id=3&user_name=chen
    

    테스트 결과:
    400 의 오 류 를 보고 한 것 은 클 라 이언 트 가 전달 하 는 매개 변수 개수 와 서버 매개 변수 개수 가 같 지 않다 는 것 을 의미한다.이 문 제 를 해결 하려 면 대응 하 는 속성 required 의 값 을 false 로 설정 하 십시오. 여 기 는 note 의 값 을 전달 하지 않 기 때문에 @RequestParam(value = "note")String note @RequestParam(value = "note",required = false)String note 다시 한 번 테스트 합 니 다.
           :      : http://localhost:8080/my/annotation?user_id=3&user_name=chen
    

    테스트 결과:
    테스트 성공
    만약 한 실체의 필드 가 매우 많다 면, 이렇게 매개 변 수 를 전달 하 는 것 은 매우 불편 하 다.이 럴 때 또 다른 주 해 를 언급 해 야 합 니 다. 바로 @ Requuset Body 라 는 주해 입 니 다.
    @ RequestBody 주석
  • 역할: 전단 의 대상 을 백 엔 드 의 대상 으로 비 추 는 것 이다.예 를 들 어 전단 에서 user 대상 을 전달 하고 이 주 해 를 사용 하면 백 엔 드 의 해당 방법 은 user 대상 으로 이 인 자 를 받 아들 일 수 있 습 니 다.

  • 두 가지 주의:
  • 바로 전단 에서 전달 하 는 대상 속성 이 반드시 백 엔 드 와 대응 해 야 한 다 는 것 이다.예 를 들 어 백 엔 드 에서 정의 하 는 user 속성 은 int id, String name 이 고 전단 도 같은 유형 과 필드 를 사용 하여 정의 해 야 합 니 다.
  • JSon 데이터 세트 를 사용 하여 전달 해 야 합 니 다. 즉, contentType: "application / json"
  • 으로 설정 합 니 다.
  • 사용 사례
     /**
     *   @RequestBody      json    
     *      Json                 ,        
     * localhost:8080/my/insert    {"id":1,"name":"chen"}        json
     * @param user
     * @return
     */
     @PostMapping("/insert")
     @ResponseBody
     public Map insert(@RequestBody User user){
       Map map = new HashMap<>();
       map.put("user",user);
       return map;
     }
    
  • postman 을 사용 하여 테스트:
    json 데이터 설정:
    테스트 결과
    @ PathVariable 주석
  • 작용 은 url 을 통 해 백 엔 드 에 파 라 메 터 를 전달 합 니 다.주로 rest 스타일 에 사 용 됩 니 다. 예 를 들 어 사용자 번호 가 1 이 고 이름 이 chen 인 사용 자 를 가 져 오 려 면 / get / 1 / chen 을 입력 하여 조회 할 수 있 습 니 다. @ PathVariable 주 해 는 URL 의 해당 매개 변 수 를 방법 중의 매개 변수 에 투사 하 는 것 입 니 다.
  • 예 를 들 어 번호 와 이름 을 통 해 사용 자 를 조회 하려 면 @ PathVariable 이라는 주 해 를 사용 할 수 있 습 니 다.
    /**
    *   uRL           @PathVariable
    *   :localhost:8080/my/get/1/chen
    *                    ,    @PathVariable    ,     ,    @PathVariable            
    * @param id
    * @param name
    * @return
    */
    @GetMapping("/get/{id}/{name}")
    @ResponseBody
    public User getUser(@PathVariable int id,@PathVariable String name){
      Map map = new HashMap<>();
      User user = new User();
      user.setId(id);
      user.setName(name);
      return user;
    }
    

  • 테스트 는 다음 과 같 습 니 다:
              : localhost:8080/my/get/1/chen
    

    테스트 결과:
    테스트 성공
    참고 자료:
  • 양 개 진
  • springboot 의 공식 문서
  • 올 바른 길에서 최선 을 다 하면 꿈 은 결국 현실 에 비춘다.초보 프로그래머 로부터 온 닭고기 수프

    좋은 웹페이지 즐겨찾기