怎么自己做网站吗淘宝网页版下载
怎么自己做网站吗,淘宝网页版下载,最新闻头条新闻,济南正宗网站建设平台1.1 访问路径设置
RequestMapping注解的作用就是将请求的 URL 地址和处理请求的方式#xff08;handler方法#xff09;关联起来#xff0c;建立映射关系。
SpringMVC 接收到指定的请求#xff0c;就会来找到在映射关系中对应的方法来处理这个请求。
1.1.1 精准路径匹配…1.1 访问路径设置
RequestMapping注解的作用就是将请求的 URL 地址和处理请求的方式handler方法关联起来建立映射关系。
SpringMVC 接收到指定的请求就会来找到在映射关系中对应的方法来处理这个请求。
1.1.1 精准路径匹配
Controller
public class UserController {/*** 精准设置访问地址 /user/login*/RequestMapping(value {/user/login})ResponseBodypublic String login(){System.out.println(UserController.login);return login success!!;}1.1.2 模糊路径匹配
在RequestMapping注解指定 URL 地址时通过使用通配符匹配多个类似的地址。
Controller
public class ProductController {/*** 路径设置为 /product/* * /* 为单层任意字符串 /product/a /product/aaa 可以访问此handler * /product/a/a 不可以* 路径设置为 /product/** * /** 为任意层任意字符串 /product/a /product/aaa 可以访问此handler * /product/a/a 也可以访问, /product/a/a/a还可以访问* * 将来的配置拦截器也遵循这个规则*/RequestMapping(/product/*)ResponseBodypublic String show(){System.out.println(ProductController.show);return product show!;}
}1.1.3 类和方法级的RequestMapping
设置到类级别RequestMapping 注解可以设置在控制器类上用于映射整个控制器的通用请求路径。这样如果控制器中的多个方法都需要映射同一请求路径就不需要在每个方法上都添加映射路径。设置到方法级别RequestMapping 注解也可以单独设置在控制器方法上用于更细粒度地映射请求路径和处理方法。当多个方法处理同一个路径的不同操作时可以使用方法级别的 RequestMapping 注解进行更精细的映射。并且, 可以将两者结合优化代码的实现 :
//1.标记到handler方法Controllerpublic class UserController {RequestMapping(value {/user/login})ResponseBodypublic String login(){System.out.println(UserController.login);return login success!!;}RequestMapping(value {/user/register})ResponseBodypublic String register(){System.out.println(UserController.register);return register success!!;}
}//2.优化标记类handler方法//类上定位到/userRequestMapping(/user)Controllerpublic class UserController {//handler方法上再进一步指明RequestMapping(value {/login})ResponseBodypublic String login(){System.out.println(UserController.login);return login success!!;}RequestMapping(value {/register})ResponseBodypublic String register(){System.out.println(UserController.register);return register success!!;}
}1.1.4 请求方法限制
HTTP 协议定义了八种请求方式在 SpringMVC 中封装到了下面这个枚举类
public enum RequestMethod {GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE
}默认情况下RequestMapping所注解的方法/类, 任何请求方式都可以对接过来可以在在RequestMapping中增加一个字段methodRequestMethod.xxx来指定请求方式 ,可同时指定多种请求方式 :违背请求方式会出现405异常
Controller
public class UserController {/*** 精准设置访问地址 /user/login* method RequestMethod.POST 可以指定单个或者多个请求方式!* 注意:违背请求方式会出现405异常!*/RequestMapping(value {/user/login} , method RequestMethod.POST)ResponseBodypublic String login(){System.out.println(UserController.login);return login success!!;}/*** 指定多种请求方式*/RequestMapping(value {/user/register},method {RequestMethod.POST,RequestMethod.GET})ResponseBodypublic String register(){System.out.println(UserController.register);return register success!!;}}1.1.5 优化请求方法限制的代码 :
RequestMapping 的 HTTP 方法特定快捷方式变体
GetMappingPostMappingPutMappingDeleteMappingPatchMapping
注意进阶注解只能添加到handler方法上无法添加到类上
RequestMapping(value/login,methodRequestMethod.GET)
||
GetMapping(value/login)1.1.7 GetMapping和PostMapping :
安全性 涉及敏感数据或操作时使用POST请求可能更安全。因为GET请求的参数直接暴露在URL中可能会被记录在服务器日志或浏览器历史记录中而POST请求的参数通常在请求体中相对更安全。请求体 如果操作需要接收复杂的请求体例如JSON或表单数据使用POST请求更为合适。POST请求的请求体可以用于传递较大或复杂的数据。RESTful设计原则 根据RESTful原则GET请求用于读取资源而POST请求用于创建或修改资源。 1.1.6常见问题 :
出现原因多个 handler 方法映射了同一个地址导致 SpringMVC 在接收到这个地址的请求时该找哪个 handler 方法处理。 There is already ‘demo03MappingMethodHandler’ bean method com.atguigu.mvc.handler.Demo03MappingMethodHandler#empGet() mapped. 1.2 接收参数
1.2.1 param和json参数比较
在 HTTP 请求中我们可以选择不同的参数类型如 param 类型和 JSON 类型。下面对这两种参数类型进行区别和对比 参数编码 param 类型的参数会被编码为 ASCII 码。例如假设 namejohn doe则会被编码为 namejohn%20doe。而 JSON 类型的参数会被编码为 UTF-8。 参数顺序 param 类型的参数没有顺序限制。但是JSON 类型的参数是有序的。JSON 采用键值对的形式进行传递其中键值对是有序排列的。 数据类型 param 类型的参数仅支持字符串类型、数值类型和布尔类型等简单数据类型。而 JSON 类型的参数则支持更复杂的数据类型如数组、对象等。 嵌套性 param 类型的参数不支持嵌套。但是JSON 类型的参数支持嵌套可以传递更为复杂的数据结构。 可读性 param 类型的参数格式比 JSON 类型的参数更加简单、易读。但是JSON 格式在传递嵌套数据结构时更加清晰易懂。
总的来说param 类型的参数适用于单一的数据传递而 JSON 类型的参数则更适用于更复杂的数据结构传递。根据具体的业务需求需要选择合适的参数类型。在实际开发中常见的做法是在 GET 请求中采用 param 类型的参数而在 POST 请求中采用 JSON 类型的参数传递。 1.2.2 param参数接收
直接传值 例如客户填写表单后 , 参数直接放在链接中传递: 此时在handler中 , 只要形参名和类型都与传递参数一一对应.即可自动接收 :
Controller
RequestMapping(param)
public class ParamController {/*** 前端请求链接 : localhost:8080/param/value?name你好age18* 利用形参列表,直接接收前端传递的param参数!* 要求: 参数名 形参名* * 类型相同* 出现乱码正常json接收具体解决* return 返回前端数据*/GetMapping(value/value)ResponseBodypublic String setupForm(String name,int age){System.out.println(name name , age age);return name age;}
}直接传值有一个显然的缺点 , 形参和传递参数并不一定同名也一一对应(例如用户干脆就不填age)
RequestParam注解传值 (仅可在形参列表中声明)
RequestParam使用场景
指定绑定的请求参数名要求请求参数必须传递 (默认为必须传递)为请求参数提供默认值 /*** 前端请求: http://localhost:8080/param/data?namexxstuAge18* * 使用RequestParam注解标记handler方法的形参* 指定形参对应的请求参数RequestParam(请求参数名称)*/
GetMapping(value/data)
ResponseBody
//通过RequestPararm注解,指定传递参数name赋给形参name ,
// 指定stuAge传给age , 且修改为不必须传递 , 设定默认值18
public Object paramForm(RequestParam(value name) String name, RequestParam(value stuAge,required false,defaultValue 18) int age){System.out.println(name name , age age);//return nameage;
}默认情况下使用RequestPararm注解的方法参数是必需的但可以通过将 RequestParam 注解的 required 标志设置为 false
特殊场景接值
a. 一名多值 需求 : 多选框提交的数据的时候一个key对应多个值我们可以使用集合进行接收 /*** 前端请求: http://localhost:8080/param/mul?hbs吃hbs喝* 一名多值,可以使用集合接收即可!但是需要使用RequestParam注解指定*/GetMapping(value/mul)ResponseBodypublic Object mulForm(RequestParam ListString hbs){System.out.println(hbs hbs);return hbs;}b. 实体接收
优点 : 可以在方法内部直接使用对象的属性来访问请求参数而不需要每个参数都写一遍。 缺点 : 由于是通过对象传值 , 无法采用RequestParam绑定形参和传递参数 , 因此二者的属性名必须要相同 . 即User类内部定义的是name和age,那么传递参数的名也必须是name和age.
定义一个用于接收参数的实体类
public class User {private String name;private int age 18;// getter 和 setter 略
}在控制器中使用实体对象接收示例代码如下
Controller
RequestMapping(param)
public class ParamController {POSTMapping(value /user)ResponseBodypublic String addUser(User user) {// 在这里可以使用 user 对象的属性来接收请求参数System.out.println(user user);return success;}
}在上述代码中将请求参数name和age映射到实体类属性上要求属性名必须等于参数名否则无法映射
使用postman传递参数测试 1.2.3 接收JSON参数(RequestBody)
RequestBody 注解来将 JSON 数据转换为 Java 对象RequestBody 注解表示当前方法参数的值应该从请求体中获取并且需要指定 value 属性来指示请求体应该映射到哪个参数上
定义一个用来接收json数据的实体类
public class Person {private String name;private int age;private String gender;// getter 和 setter 略
}前端发送 JSON 数据的示例使用postman测试
{name: 张三,age: 18,gender: 男
}在控制器中使用 RequestBody 注解来接收 JSON 数据并将其转换为 Java 对象:
PostMapping(/person)
ResponseBody
public String addPerson(RequestBody Person person) {// 在这里可以使用 person 对象来操作 JSON 数据中包含的属性return success;
}Java原生只支持param传参和路径传参 , json是前端定义的格式 .因此需要做两件事. a. 导入json依赖 b.handlerAdapter配置json转化器(即在config类上增加EnableWebMvc)
dependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-databind/artifactIdversion2.15.0/version
/dependency此时运行程序 可以接收到传来的json。 插播一条EnableWebMvc注解
原本MvcConfig类中我们需要重写handlerMappinghandlerAdapter两个方法上例中又加入了一个新需求即配置一个json转化器。然而这一切只需要MvcConfig上声明一个EnableWebMvc注解即可实现。 1.2.4 路径参数接收(动态传参)
先理解是什么:
http://localhost:8080/user/login?accountrootpassword12345
||
http://localhost:8080/user/root/12345
即将每个参数视为路径 , 这就是路径传参路径传递参数是一种在 URL 路径中传递参数的方式。在 RESTful 的 Web应用程序中经常使用路径传递参数来表示资源的唯一标识符或更复杂的表示方式。Spring MVC 框架提供了 PathVariable 注解来处理路径传递参数 , 该注解允许将 URL 中的占位符映射到控制器方法中的参数。
例如如果我们想将 /user/{id} 路径下的 {id} 映射到控制器方法的一个参数中则可以使用 PathVariable 注解来实现。 /*** 动态路径设计: /user/{动态部分}/{动态部分} 动态部分使用{}包含即可! {}内部动态标识!* 形参列表取值: PathVariable Long id 如果形参名 {动态标识} 自动赋值!* PathVariable(动态标识) Long id 如果形参名 ! {动态标识} 可以通过指定动态标识赋值!* 和RequestParama一样 , 通过value属性绑定两个属性(PathVariable(valuestuAge) int age)*///动态路径设计, 可在形参列表获取传入的参数
GetMapping(/user/{id}/{name})
ResponseBody
//形参列表获取参数, 分别传入上头的GetMapping和下面的方法
public String getUser(PathVariable Long id, PathVariable(name) String uname) {System.out.println(id id , uname uname);return user_detail;
}//访问测试: /param/user/1/root 可得结果: id 1 uname root
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/89363.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!