매개 변수 수신 응답 변환 원리 설명 SpringBoot 상용 주해
8416 단어 springspringboot자바
1.1 @ RequestBody 와 @ ResponseBody
// @RequestBody @ResponseBody 。
public @ResponseBody AjaxResponse saveArticle(@RequestBody ArticleVO article)
위 코드 와 같이:
그러면 우 리 는 질문 이 하나 있 습 니 다. 만약 우리 가 XML 데 이 터 를 받 고 싶다 면 어떻게 해 야 합 니까?우 리 는 엑셀 의 데이터 형식 에 응답 하려 면 어떻게 해 야 합 니까?우 리 는 뒷글 로 이 문제 에 대답 했다.
1.2. @ RequestMapping 주석
@ RequestMapping 주 해 는 모든 상용 주석 중에서 가장 볼 만 한 주석 으로 HTTP 서비스 점 을 표시 하 는 데 사 용 됩 니 다.그것 의 많은 속성 은 우리 의 응용 개발 방식 방법 을 풍부하게 하 는 데 매우 중요 한 역할 을 한다.예:
@RequestMapping(value = "/article", method = POST)
@PostMapping(value = "/article")
위의 코드 에서 두 가지 쓰기 방법 은 같은 효 과 를 가 집 니 다. 즉, PostMapping 은 @ RequestMapping 과 같은 method 는 POST 와 같 습 니 다.같은 이치: @ GetMapping, @ PutMapping, @ DeleteMapping 도 모두 약자 입 니 다.
1.3. @ RestController 와 @ Controller
@ Controller 주 해 는 개발 에서 가장 자주 사용 되 는 주해 로 그 역할 은 두 가지 의미 가 있 습 니 다.
@ RestController 는 @ Controller 와 @ ResponseBody 의 결합 에 해당 합 니 다.그것 은 두 가지 의미 가 있다.
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;
}
} 이상 의 동작 을 완성 하면 우 리 는
@RequestBody ParamData paramData 을 사용 할 수 있 습 니 다. 상기 모든 복잡 한 포 함 된 대상 파 라 메 터 를 한꺼번에 받 을 수 있 고 매개 변수 대상 의 모든 속성 이 부 여 됩 니 다.3. Http 데이터 변환 의 원리
여러분 들 은 현재 JSON 을 사용 하 는 것 이 비교적 보편적 이 고 사용 하기 쉽 고 표 현 력 이 강 하 며 대부분 데이터 인터페이스 식 응용 에서 가장 좋 은 선택 입 니 다.그러면 어떻게 다른 유형의 데이터 에 응답 합 니까?그 중의 판별 원 리 는 또 무엇 입 니까?다음은 여러분 께 소개 하 겠 습 니 다.
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());
}
}
}
당신 의 관심 을 기대 합 니 다
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thymeleaf로 HTML 페이지를 동적으로 만듭니다 (spring + gradle)지난번에는 에서 화면에 HTML을 표시했습니다. 이번에는 화면을 동적으로 움직여보고 싶기 때문에 입력한 문자를 화면에 표시시키고 싶습니다. 초보자의 비망록이므로 이상한 점 등 있으면 지적 받을 수 있으면 기쁩니다! ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.