내 연락처 정보
우편메소피아@프로톤메일.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
목차
요청: 요청 데이터 가져오기
응답: 응답 데이터 설정
BS 아키텍처 브라우저/서버, 브라우저/서버 아키텍처 모드, 클라이언트에는 브라우저만 필요하며 애플리케이션 로직과 데이터는 서버에 저장됩니다(유지 관리가 쉽고 평균적인 경험)
CS 아키텍처 클라이언트/서버, 클라이언트/서버 아키텍처 모드(개발과 유지관리가 번거롭지만 경험치는 좋습니다)
HttpServletRequest를 통해 수동으로 가져오기
- import jakarta.servlet.http.HttpServletRequest;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RestController;
-
- @RestController
- public class RequestController {
- @RequestMapping("/SimpleParam")
- public String SimpleParam(HttpServletRequest request){ //返回的字符串类型是String
- String name=request.getParameter("name");
- String age=request.getParameter("age"); //通过这个方法得到字符串类型的
- int age1=Integer.parseInt(age); //将年龄进行类型转换
- System.out.println(name+":"+age1); //设置返回格式
- return "OK";
- }
- }
단순 매개변수:매개변수 이름은 정식 매개변수 변수 이름과 동일합니다., 형식 매개변수를 정의하는 것은 매개변수를 수신하는 것을 의미합니다.
- @RestController
- public class RequestController {
- @RequestMapping("/SimpleParam")
- public String SimpleParam(String name,Integer age){
- System.out.println(name+":"+age);
- return "OK";
- }
- }
여기서 Postman의 URL은 모두http://localhost:8080/SimpleParam?name=tom&age=10
위 두 가지 모두 get 요청입니다. post 요청인 경우 postman에 URL만 입력하면 됩니다.http://localhost:8080/심플파라미터
게시물에 한자가 포함된 경우 배경에 글자가 깨져서 표시되므로 구성에서 필터를 설정하세요.
웹 컨테이너에 필터를 추가하고 문자 집합을 지정합니다. Spring-web 패키지에는 전용 문자 필터가 제공됩니다.
- public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
- protected Class<?>[] getRootConfigClasses() {
- return new Class[0];
- }
-
- protected Class<?>[] getServletConfigClasses() {
- return new Class[]{SpringMvcConfig.class};
- }
-
- protected String[] getServletMappings() {
- return new String[]{"/"};
- }
- //乱码处理
- @Override
- protected Filter[] getServletFilters() {
- CharacterEncodingFilter filter = new CharacterEncodingFilter();
- filter.setEncoding("UTF-8");
- return new Filter[]{filter};//如果有多个过滤器,在这里用,隔开
- }
- }
이 프로세스는 게시용입니다. get이 중국어로 전달되면 잘못된 문자가 계속 나타납니다.
메소드 매개변수 이름이 요청 매개변수 이름과 일치하지 않으면 @RequestParam을 사용하여 매핑을 완료할 수 있습니다.
- @RestController
- public class RequestController {
- @RequestMapping("/SimpleParam")
- public String SimpleParam(@RequestParam(name="name") String username, Integer age){ //引号中写的是请求参数名
- System.out.println(username+":"+age);
- return "OK";
- }
- }
@PequestParam의 필수 속성은 기본값이 true입니다. 이는 요청 매개변수가 전달되어야 함을 의미합니다. 매개변수가 선택사항인 경우(즉, 전달 가능 여부) 오류가 보고됩니다. 필수 속성을 false로 설정할 수 있습니다. (이러한 방식으로 통과 여부에 관계없이 오류가 보고되지 않습니다.)
요청 매개변수 이름은 정식 매개변수 속성 이름과 동일하므로 Pojo를 정의하면 됩니다.
- @RestController
- public class SimplePojo {
- @RequestMapping("/SimpleParam1")
- public String SimplePojo(user user) {
- System.out.println(user);
- return "yes";
- }
- }
- public class user {
- private String name;
- private Integer age;
- //加getter和setter方法toString
- }
여기 URL은http://localhost:8080/SimpleParam1?name=cat&age=29
요청 매개변수 이름은 형식 매개변수 속성 이름과 동일합니다.를 사용하면 개체 계층 관계에 따라 중첩된 pojo 속성 매개변수를 받을 수 있습니다.
- public class user {
- private String name;
- private Integer age;
- private Address address;
- //加getter和setter和toString
- }
- public class Address {
- private String province;
- private String city;
- //加getter和setter还有toString
- }
- @RestController
- public class SimplePojo {
- @RequestMapping("/ComplexParam1")
- public String ComplexParam(user user) {
- System.out.println(user);
- return "yes";
- }
- }
요청 파라미터 이름은 정식 파라미터 그룹 이름과 동일하며 요청이 여러 개 있습니다., 매개변수를 수신할 배열 유형 형식 매개변수를 정의합니다.
- @RestController
- public class SimplePojo {
- @RequestMapping("/arrayParam")
- public String ArrayParam(String[] hobby) {//在这里建立一个数组,然后后面的名称和传入参数相同
- System.out.println(Arrays.toString(hobby));
- return "yes";
- }
- }
요청 매개변수 이름은 정식 매개변수 컬렉션 이름과 동일하며 요청 매개변수가 여러 개 있습니다.,@요청파라미터바인딩 매개변수 관계
- @RestController
- public class SimplePojo {
- @RequestMapping("/listParam")
- public String ArrayParam(@RequestParam List<String> hobby) {
- System.out.println(hobby);
- return "yes";
- }
- }
@DateTimeFormat 주석을 사용하여 날짜 매개변수 형식 변환을 완료하세요.
- @RestController
- public class SimplePojo {
- @RequestMapping("/dateParam")
- public String dateParam(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")LocalDateTime updateTime) {
- System.out.println(updateTime);
- return "yes";
- }
- }
- //日期参数
- //使用@DateTimeFormat注解设置日期类型数据格式,默认格式yyyy/MM/dd @RequestMapping("/dataParam")
- @ResponseBody
- public String dataParam(Date date,@DateTimeFormat(pattern="yyyy-MM-dd") Date date1, @DateTimeFormat(pattern="yyyy/MM/dd HH:mm:ss") Date date2){
- System.out.println("参数传递 date ==> "+date);
- System.out.println("参数传递 date1(yyyy-MM-dd) ==> "+date1);
- System.out.println("参数传递 date2(yyyy/MM/dd HH:mm:ss) ==> "+date2);
- return "{'module':'data param'}"; }
- }
- //@DateTimeFormat是形参注解,用在SpringMVC控制器方法形参前面,用于设定日期时间型数据格式//属性:pattern:日期时间格式字符串
테스트 받기:
json 매개변수 키 이름은 형식 매개변수 객체 속성 이름과 동일합니다. Pojo 형식 매개변수를 정의하여 매개변수를 받을 수 있습니다. @RequestBody 식별자를 사용해야 합니다.
- @RestController
- public class SimplePojo {
- @RequestMapping("/jsonParam")
- public String jsonParam(@RequestBody user user) {
- System.out.println(user);
- return "yes";
- }
- }
- //user这和前面的复杂实体参数一样
@requestbody를 통해 json을 사용자 엔터티 클래스로 캡슐화합니다.
먼저 좌표 가져오기
- <dependency>
- <groupId>com.fasterxml.jackson.core</groupId>
- <artifactId>jackson-databind</artifactId>
- <version>2.9.0</version>
- </dependency>
Json 데이터 자동 변환 지원 활성화
- @Configuration
- @ComponentScan("com.itheima.controller")
- //开启json数据类型自动转换
- @EnableWebMvc
- public class SpringMvcConfig {
- }
- //集合参数:json格式
- //1.开启json数据格式的自动转换,在配置类中开启@EnableWebMvc
- //2.使用@RequestBody注解将外部传递的json数组数据映射到形参的集合对象中作为数据
- //它用来将请求体所包含的数据传递给请求参数,此注解一个处理器方法只能使用一次
- @RequestMapping("/listParamForJson")
- @ResponseBody
- public String listParamForJson(@RequestBody List<String> likes){
- System.out.println("list common(json)参数传递 list ==> "+likes);
- return "{'module':'list common for json param'}";
- }
- //POJO参数:json格式
- //1.开启json数据格式的自动转换,在配置类中开启@EnableWebMvc
- //2.使用@RequestBody注解将外部传递的json数据映射到形参的实体类对象中,要求属性名称一一对应
- @RequestMapping("/pojoParamForJson")
- @ResponseBody
- public String pojoParamForJson(@RequestBody User user){
- System.out.println("pojo(json)参数传递 user ==> "+user);
- return "{'module':'pojo for json param'}";
- }
Get 요청을 할 때:
- {
- "name":"xixi",
- "age":21,
- "address":{
- "provice":"taiyuan",
- "city":"taiyuan"
- }
- }
- //集合参数:json格式
- //1.开启json数据格式的自动转换,在配置类中开启@EnableWebMvc
- //2.使用@RequestBody注解将外部传递的json数组数据映射到形参的保存实体类对象的集合对象中,要求属性名称一一对应
- @RequestMapping("/listPojoParamForJson")
- @ResponseBody
- public String listPojoParamForJson(@RequestBody List<User> list){
- System.out.println("list pojo(json)参数传递 list ==> "+list);
- return "{'module':'list pojo for json param'}";
- }
Get 요청을 할 때:
- [{"name":"xixi","age":12},
- {"name":"haha","age":21}
- ]
요청 URL을 통해 매개변수를 직접 전달하십시오. 경로 매개변수를 식별하려면 {...}를 사용하십시오. 경로 매개변수를 얻으려면 @PathVariable을 사용해야 합니다.
경로 매개변수
- @RestController
- public class SimplePojo {
- @RequestMapping("/path/{id}")
- public String pathParam(@PathVariable Integer id) {
- System.out.println(id);
- return "yes";
- }
- }
우편 배달부가 테스트한 URL은 다음과 같습니다.http://localhost:8080/경로/1
다중 경로 매개변수
- @RestController
- public class SimplePojo {
- @RequestMapping("/path/{id}/{name}")
- public String pathParam(@PathVariable Integer id ,@PathVariable String name) {
- System.out.println(id+":"+name);
- return "yes";
- }
- }
우편 배달부가 테스트한 URL은 다음과 같습니다.http://localhost:8080/경로/1/cat
질문: 개발시 요청하는 경로가 달라야 하는데, 같은 경로가 있으면 어떤 경로를 호출해야 할지 모르겠어서 -----------보통은 통해요.요청 경로의 접두어로 모듈 이름을 설정합니다.
메소드 주석과 클래스 주석입니다.
SpringMVC 컨트롤러 메서드 정의 위에 배치합니다.
컨트롤러 메소드 요청 경로를 설정하는 데 사용됩니다., 클래스에서 현재 컨트롤러 메서드를 설정하는 경우 액세스 경로 접두사를 요청합니다.
- @Controller
- //设置模块名作为请求路径的前缀
- @RequestMapping("/user")
- public class UserController {
- //请求路径映射
- @RequestMapping("/save")
- @ResponseBody
- public String save(){
- System.out.println("user save ...");
- return "{'module':'user save'}";
- }
- //请求路径映射
- @RequestMapping("/delete")
- @ResponseBody
- public String delete(){
- System.out.println("user delete ...");
- return "{'module':'user delete'}";
- }
-
- }
속성: 값(기본값): 요청 액세스 경로.또는 액세스 경로 접두사
@RequestParam은 SpringMVC 컨트롤러 메서드 매개변수 정의 앞에 있는 형식 매개변수 주석으로, 요청 매개변수와 프로세서 메서드 매개변수 간의 관계를 바인딩하는 데 사용됩니다.
매개변수: 필수: 필수 매개변수인지 여부 DefaultValue: 매개변수의 기본값
메소드 주석과 클래스 주석인가요?
컨트롤러 메서드/클래스에 위치
기능은메소드 반환 값에 직접 응답합니다. 반환 값 유형이 엔터티 개체/컬렉션인 경우 JSON 형식 응답으로 변환됩니다.
@RestController=@컨트롤러+@응답본문
- @RestController
- public class ResponseController {
- @RequestMapping("/hello")
- public String hello(){
- System.out.println("hello world");
- return "hello world~";
- }
- @RequestMapping("/getAddr")
- public Address getAddr(){
- Address addr=new Address();
- addr.setProvince("山西");
- addr.setCity("太原");
- return addr;
- }
- @RequestMapping("/listAddr")
- public List<Address> ListAddr(){
- List<Address> list=new ArrayList<>();
- Address addr=new Address();
- addr.setProvince("山西");
- addr.setCity("太原");
- Address addr2=new Address();
- addr2.setProvince("山");
- addr2.setCity("太");
- list.add(addr);
- list.add(addr2);
- return list;
- }
- }
테스트는 postman에 입력됩니다.http://localhost:8080/목록 주소그게 다야, 다른 비슷한 것
외부에 노출된 각 메소드를 기능적 인터페이스(예: 위에 3개의 인터페이스가 있음)라고 하며, 경로는 해당 메소드의 액세스 경로입니다.
문제는 응답 결과가 서로 다르고 결과에 대한 최종 분석이 더 까다로워 응답 결과를 통일할 필요가 있다는 점이다.
- public class Result {
- private Integer code;
- private String msg;
- private Object data;
- public Result(){
-
- }
- public Result(Integer code,String msg,Object data){
- this.code=code;
- this.msg=msg;
- this.data=data;
-
- }
- public Integer getCode() {
- return code;
- }
-
- public void setCode(Integer code) {
- this.code = code;
- }
-
- public String getMsg() {
- return msg;
- }
-
- public void setMsg(String msg) {
- this.msg = msg;
- }
-
- public Object getData() {
- return data;
- }
-
- public void setData(Object data) {
- this.data = data;
- }
- public static Result success(Object data){
- return new Result(1,"success",data);
- }
- public static Result success(){
- return new Result(1,"success",null);
- }
- public static Result error(String msg){
- return new Result(0,msg,null);
- }
- @Override
- public String toString() {
- return "Result{" +
- "code=" + code +
- ", msg='" + msg + ''' +
- ", data=" + data +
- '}';
- }
- }
- @RestController
- public class ResponseController {
- @RequestMapping("/hello")
- public Result hello(){
- System.out.println("hello world");
- //return new Result(1,"success","hello world");
- return Result.success("hello world~");//需要给前端传送数据
- }
- @RequestMapping("/getAddr")
- public Result getAddr(){
- Address addr=new Address();
- addr.setProvince("山西");
- addr.setCity("太原");
- return Result.success(addr);
- }
- @RequestMapping("/listAddr")
- public Result ListAddr(){
- List<Address> list=new ArrayList<>();
- Address addr=new Address();
- addr.setProvince("山西");
- addr.setCity("太原");
- Address addr2=new Address();
- addr2.setProvince("山");
- addr2.setCity("太");
- list.add(addr);
- list.add(addr2);
- return Result.success(list);
- }
- }