매개 변수 수신 응답 변환 원리 설명 SpringBoot 상용 주해

1. 상용 주해 회고
1.1 @ RequestBody 와 @ ResponseBody

//      @RequestBody @ResponseBody    。
public @ResponseBody  AjaxResponse saveArticle(@RequestBody ArticleVO article)

위 코드 와 같이:
  • @ RequestBody 수식 요청 인자, HTTP 를 받 는 body 에 대한 주 해 는 기본적으로 JSON 형식
  • 을 사용 합 니 다.
  • @ Response Body 는 반환 값 을 수식 합 니 다. 주 해 는 HTTP body 에서 응답 데 이 터 를 가 져 오 는 데 사 용 됩 니 다. 기본 값 은 JSON 형식 을 사용 합 니 다.이 주 해 를 추가 하지 않 으 면 spring 응답 문자열 형식 은 템 플 릿 페이지 나 jsp 페이지 로 이동 하 는 개발 모델 입 니 다.설명: 이 주 해 를 더 하면 당신 이 개발 한 것 은 데이터 인터페이스 입 니 다. 이 주 해 를 추가 하지 않 고 당신 이 개발 한 것 은 페이지 전환 컨트롤 러 입 니 다.

  • 그러면 우 리 는 질문 이 하나 있 습 니 다. 만약 우리 가 XML 데 이 터 를 받 고 싶다 면 어떻게 해 야 합 니까?우 리 는 엑셀 의 데이터 형식 에 응답 하려 면 어떻게 해 야 합 니까?우 리 는 뒷글 로 이 문제 에 대답 했다.
    1.2. @ RequestMapping 주석
    @ RequestMapping 주 해 는 모든 상용 주석 중에서 가장 볼 만 한 주석 으로 HTTP 서비스 점 을 표시 하 는 데 사 용 됩 니 다.그것 의 많은 속성 은 우리 의 응용 개발 방식 방법 을 풍부하게 하 는 데 매우 중요 한 역할 을 한다.예:
  • value: 요청 점, 가장 핵심 적 인 속성 을 응용 하여 표지 요청 처리 방법의 유일 성에 사용 합 니 다.
  • method: HTTP 프로 토 콜 의 method 유형, 예 를 들 어 GET, POST, PUT, DELETE 등;
  • consumes: HTTP 프로 토 콜 요청 내용 의 데이터 형식 (Content - Type), 예 를 들 어 application / json, text / html;
  • produces: HTTP 프로 토 콜 응답 내용 의 데이터 형식 입 니 다.다음은 상세 하 게 설명 하 겠 습 니 다.
  • params: HTTP 요청 에 일부 매개 변수 값 이 포함 되 어 있어 야 표 시 된 방법 으로 요청 을 처리 할 수 있 습 니 다.
  • headers: HTTP 요청 에는 지정 한 header 값 이 포함 되 어야 표 시 된 방법 으로 요청 을 처리 할 수 있 습 니 다.
  • 
    @RequestMapping(value = "/article", method = POST)
    @PostMapping(value = "/article")
    

    위의 코드 에서 두 가지 쓰기 방법 은 같은 효 과 를 가 집 니 다. 즉, PostMapping 은 @ RequestMapping 과 같은 method 는 POST 와 같 습 니 다.같은 이치: @ GetMapping, @ PutMapping, @ DeleteMapping 도 모두 약자 입 니 다.
    1.3. @ RestController 와 @ Controller
    @ Controller 주 해 는 개발 에서 가장 자주 사용 되 는 주해 로 그 역할 은 두 가지 의미 가 있 습 니 다.
  • 첫째, Spring 에 게 이 주석 에 표 시 된 종 류 는 Spring 의 Bean 으로 Spring 의 문맥 환경 에 주입 되 어야 한 다 는 것 을 알려 주 는 것 이다.
  • 두 번 째 는 이 클래스 에 있 는 모든 Request Mapping 에 표 시 된 주 해 는 HTTP 서비스 점 입 니 다.

  • @ RestController 는 @ Controller 와 @ ResponseBody 의 결합 에 해당 합 니 다.그것 은 두 가지 의미 가 있다.
  • 첫째, 컨트롤 러 의 역할 로 컨트롤 러 류 를 Spring 컨 텍스트 환경 에 주입 하 는 것 입 니 다. 이 RequestMapping 레이 블 방법 은 HTTP 서비스 점 입 니 다.
  • 두 번 째 는 Response Body 의 역할 로 서 응답 을 요청 하 는 기본 적 인 직렬 화 방식 은 jsp 나 템 플 릿 페이지 로 이동 하 는 것 이 아니 라 JSON 입 니 다.

  • 1.4. @ PathVariable 과 @ RequestParam
    PathVariable 은 URI 의 {인자} 에 사 용 됩 니 다. 다음 방법 은 글 한 편 을 삭제 하 는 데 사 용 됩 니 다. 그 중에서 id 는 글 id 입 니 다.예 를 들 어 우리 의 요청 URL 이 "/ article / 1" 이면 DeleteMapping 과 PathVariable 수신 인자 id = 1 과 일치 합 니 다.RequestParam 은 일반 폼 방식 이나 ajax 아 날로 그 폼 에서 제출 한 매개 변수 데 이 터 를 받 는 데 사 용 됩 니 다.
    @DeleteMapping("/article/{id}")
    public @ResponseBody AjaxResponse deleteArticle(@PathVariable Long id) {
    
    @PostMapping("/article")
    public @ResponseBody AjaxResponse deleteArticle(@RequestParam Long id) {

    2. 복잡 한 내장 대상 파라미터 수신
    일부 친구 들 은 RequestBody 주해 가 존재 하 는 진정한 의 미 를 이해 하지 못 할 수도 있 습 니 다. 폼 데 이 터 를 RequestParam 으로 제출 하면 됩 니 다. 왜 RequestBody 주 해 를 만들어 야 합 니까?RequestBody 주해 의 진정한 의 미 는 대상 이나 포 함 된 대상 을 사용 하여 전단 데 이 터 를 받 을 수 있다 는 것 이다.
    위의 코드 를 자세히 보면 paramData 대상 에 best Friend 대상 이 포함 되 어 있 습 니 다.이 데이터 구 조 는 RequestParam 을 사용 하면 받 아들 일 수 없습니다. RequestParam 은 평면 적 이 고 일대일 적 인 인자 만 받 을 수 있 습 니 다.위의 글 에서 이러한 데이터 구조의 매개 변 수 는 자바 서버 에서 두 가지 유형 을 정의 해 야 합 니 다. 하 나 는 ParamData 이 고 하 나 는 BestFriend 입 니 다.
    public class ParamData {
        private String name;
        private int id;
        private String phone;
        private BestFriend bestFriend;
        
        public static class BestFriend {
            private String address;
            private String sex;
        }
    }
  • 상기 코드 에서 GET, SET 방법 등 필요 한 자바 plain model 요 소 를 생략 하 였 음 을 주의 하 십시오.
  • 멤버 변수 이름 은 JSON 속성 이름과 반드시 대응 해 야 합 니 다.
  • 서로 다른 유형의 인 자 를 받 고 서로 다른 구성원 변수 유형
  • 을 사용 하 는 것 에 주의 하 십시오.
    이상 의 동작 을 완성 하면 우 리 는 @RequestBody ParamData paramData 을 사용 할 수 있 습 니 다. 상기 모든 복잡 한 포 함 된 대상 파 라 메 터 를 한꺼번에 받 을 수 있 고 매개 변수 대상 의 모든 속성 이 부 여 됩 니 다.
    3. Http 데이터 변환 의 원리
    여러분 들 은 현재 JSON 을 사용 하 는 것 이 비교적 보편적 이 고 사용 하기 쉽 고 표 현 력 이 강 하 며 대부분 데이터 인터페이스 식 응용 에서 가장 좋 은 선택 입 니 다.그러면 어떻게 다른 유형의 데이터 에 응답 합 니까?그 중의 판별 원 리 는 또 무엇 입 니까?다음은 여러분 께 소개 하 겠 습 니 다.
  • HTTP 요청 이 도 착 했 을 때 InputStream 으로 HttpMessage Converter 를 통 해 자바 대상 으로 변환 하여 매개 변 수 를 수신 합 니 다.
  • HTTP 요청 에 응답 할 때 우 리 는 먼저 자바 대상 을 출력 한 다음 HttpMessage Converter 에서 OutputStream 으로 출력 합 니 다.

  • Spring Boot 응용 프로그램 에 jackson 라 이브 러 리 를 통합 하면 다음 과 같은 HttpMessage Converter 가 불 러 옵 니 다.
    실현 류
    기능 설명
    StringHttpMessageConverter
    요청 정 보 를 문자열 로 변환
    FormHttpMessageConverter
    MultiValueMap 에서 폼 데 이 터 를 읽 습 니 다.
    XmlAwareFormHttpMessageConverter
    확장 및 FormHttpMessageConverter, 일부 폼 속성 이 XML 데이터 라면 이 변환기 로 읽 을 수 있 습 니 다.
    ResourceHttpMessageConverter
    org. springframework. core. io. 리 소스 대상 읽 기
    BufferedImageHttpMessageConverter
    읽 기와 쓰기 BufferedImage 대상
    ByteArrayHttpMessageConverter
    읽 기와 쓰기 바 이 너 리 데이터
    SourceHttpMessageConverter
    java. xml. transform. Source 형식의 대상 읽 기
    MarshallingHttpMessageConverter
    Spring 의 org. spring from work, xml. Marshaller 와 Unmarshaller 를 통 해 XML 메 시 지 를 읽 고 씁 니 다.
    Jaxb2RootElementHttpMessageConverter
    JAXB 2 를 통 해 XML 메 시 지 를 읽 고 쓰 고 요청 메 시 지 를 표 시 된 XmlRootElement 과 XmlType 이 연 결 된 클래스 로 변환 합 니 다.
    MappingJacksonHttpMessageConverter
    Jackson 오픈 소스 패키지 의 Object Mapper 를 이용 하여 JSON 데 이 터 를 읽 고 씁 니 다.
    RssChannelHttpMessageConverter
    RSS 피 드 메시지 읽 기
    AtomFeedHttpMessageConverter
    RssChannel HttpMessage Converter 와 RSS 피 드 메 시 지 를 읽 을 수 있 습 니 다.
    HTTP 프로 토 콜 의 Accept 와 Content - type 속성, 그리고 매개 변수 데이터 형식 에 따라 어떤 HttpMessageConverter 를 사용 하 는 지 판별 합 니 다.RequestBody 나 ResponseBody 를 사용 할 때 전단 에서 보 내 는 Accept 데이터 형식 을 결합 하면 데이터 변환기 로 MappingJacksonHttpMessageConverter 를 우선 사용 하 는 것 으로 자동 판정 된다.다만 JSON 은 대상 데이터 형식 뿐만 아니 라 XML 도 표현 할 수 있다.만약 우리 가 XML 형식 을 사용 하 기 를 원한 다 면 Spring 에 어떻게 알려 야 합 니까? 그러면 produces 속성 을 사용 해 야 합 니 다.
    @GetMapping(value ="/demo",produces = MediaType.APPLICATION_XML_VALUE)

    여기 서 우 리 는 되 돌아 오 는 데이터 형식 이 xml 이 라 고 명확 하 게 알려 주 었 습 니 다. Jaxb2RootElement HttpMessageConverter 를 기본 데이터 변환기 로 사용 할 것 입 니 다.물론 XML 데이터 응답 을 실현 하 는 것 은 JSON 보다 더 복잡 하 며 @ XmlRootElement, @ XmlElement 등 주해 실체 류 와 결합 하여 사용 해 야 한다.같은 이치 로 consumes 속성 을 너 도 쓸 수 있 지 않 니?
    4. 사용자 정의 HttpMessageConverter
    사실 절대 다수의 데이터 형식 은 우리 가 HttpMessage Converter 를 사용자 정의 할 필요 가 없습니다. 모두 제3자 라 이브 러 리 가 우리 가 실현 하 는 데 도움 을 줄 수 있 습 니 다 (다음 코드 의 Excel 형식 포함).그러나 일부 데이터 의 출력 형식 은 Jackson 과 같은 라 이브 러 리 가 처리 하 는 데 도움 을 주지 않 기 때문에 사용자 정의 데이터 형식 이 필요 합 니 다.어떻게 해 야 돼 요?다음 코드 는 우리 가 이해 할 수 있 도록 도와 주 는 예 일 뿐 생산 에 사용 하지 마 십시오.
    @Service
    public class TeamToXlsConverter extends AbstractHttpMessageConverter {
    
        private static final MediaType EXCEL_TYPE = MediaType.valueOf("application/vnd.ms-excel");
    
        TeamToXlsConverter() {
            super(EXCEL_TYPE);
        }
    
        @Override
        protected Team readInternal(final Class extends Team> clazz, final HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException {
            return null;
        }
    
        @Override
        protected boolean supports(final Class> clazz) {
            return (Team.class == clazz);
        }
    
        @Override
        protected void writeInternal(final Team team, final HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException {
            try (final Workbook workbook = new HSSFWorkbook()) {
                final Sheet sheet = workbook.createSheet();
                int rowNo = 0;
                for (final TeamMember member : team.getMembers()) {
                    final Row row = sheet.createRow(rowNo++);
                    row.createCell(0)
                       .setCellValue(member.getName());
                }
                workbook.write(outputMessage.getBody());
            }
        }
    }
    
  • AbstractHttpMessageConverter 인터페이스 실현
  • 이 변환 기 를 지정 하 는 것 은 어떤 데이터 형식 을 위 한 것 입 니까?상기 코드 중의 "application / vnd. ms - excel"
  • 이 컨버터 가 대상 데이터 형식 을 지정 합 니까?위의 코드 에 있 는 슈퍼 ports 함수
  • 와 같 습 니 다.
  • writeInternal 을 사용 하여 데 이 터 를 출력 처리 합 니 다. 예 를 들 어 출력 은 Excel 형식 입 니 다.

  • 당신 의 관심 을 기대 합 니 다
  • 블 로 거들 은 최근 에 책 을 새로 썼 다.
  • 본 고 는 출처 (연결 을 해 야 하 며 문자 만 돌려 서 는 안 된다): 자모 형 블 로 그 를 전재 했다.
  • 좋은 웹페이지 즐겨찾기