@ RequestMapping, @ RequsetBody 등 설명
현재 주류 웹 개발 프레임 워 크 는 바로 springMVC 에 속 하 는데 그 이 유 는 SpringMVC 가 백 스테이지 의 데 이 터 를 다양한 유형의 데이터 로 쉽게 전환 시 켜 모 바 일 인터넷 의 데이터 다양화 변화 요구 에 잘 적응 하기 때문이다.예 를 들 어 데 이 터 를 우리 가 자주 사용 하 는 제 이 슨 데이터 세트 로 쉽게 전환 할 수 있 고 엑셀, PDF, XML 등의 데이터 세트 로 전환 할 수 있다.springboot 의 발전 에 따라 주해 개발 은 개발 속도 가 빠 르 고 컴 파일 기간 에 잘못된 출처 를 발견 하기 쉬 우 며 주해 개발 은 이미 추세 가 되 었 다.이 박문 은 srpingboot 아래 의 springmvc 주 해 를 바탕 으로 정리 되 었 으 며, 아래 의 모든 코드 테스트 는 springboot 를 바탕 으로 구축 되 었 다.
springMVC 작업 흐름 도
구체 적 인 주해 사용 을 알 기 전에 springMVC 의 작업 절차 와 작업 순서 도 를 알 아 보 는 것 이 필요 하 다.
설명: 현재 대부분의 항목 이 앞 뒤 가 분리 되 어 있 기 때문에 대부분의 경우 백 엔 드 는 지정 한 JSon 데이터 세트 만 전달 하면 됩 니 다. 따라서 이곳 의 springmvc 프로 세 스 그림 의 보 기 는 json 보 기 를 기반 으로 합 니 다.
springMvc 의 순서 도 는 다음 과 같다.
srpingmvc 에서 웹 요청 을 처리 하 는 순서 그림
@ RequestMapping 주해 사용
@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 {};
}
//
@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;
}
} http://localhost:8080/my/getuser
브 라 우 저가 사용자 의 정 보 를 보 여 주 는 것 을 볼 수 있다.여기 주석 이 하나 더 사 용 됐 기 때 문 입 니 다.주로 서버 의 응답 결 과 를 되 돌려 줍 니 다.
@ ReponseBody 주석
@RequestMapping("/getuser")
// @ResponseBody
public User getUser(){
User user = new User();
user.setId(1);
user.setName("chenw1024");
return user;
} 재 테스트 를 통 해 요청 을 찾 을 수 없습니다. @Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ResponseBody {
}
원본 코드 에서 알 수 있 듯 이 이 주 해 는 속성 이 없 지만 자주 사용 합 니 다.일반적으로 방법 에 응용 된다.
@ 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;
}
/*
* @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;
}
http://localhost:8080/my/annotation?user_id=3&user_name=chen¬e=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 주석
두 가지 주의:
/**
* @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;
}
json 데이터 설정:
테스트 결과
@ 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
테스트 결과:
테스트 성공
참고 자료:
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.