私の連絡先情報
郵便メール:
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/シンプルパラメータ
投稿内に漢字が含まれる場合、背景に文字化けが表示されるため、設定でフィルターを設定してください。
Web コンテナにフィルタを追加し、文字セットを指定します。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};//如果有多个过滤器,在这里用,隔开
- }
- }
なお、この処理はpost用ですので、中国語で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 の required 属性のデフォルトは true です。これは、リクエスト パラメータを渡す必要があることを意味します。パラメータがオプションである場合 (つまり、渡すかどうかにかかわらず)、 required 属性は 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/path/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/path/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 コントローラー メソッドのパラメーター定義の前に位置する正式なパラメーター アノテーションで、リクエスト パラメーターとプロセッサー メソッドのパラメーター間の関係をバインドするために使用されます。
パラメータ: required: 必須パラメータかどうか DefaultValue: パラメータのデフォルト値
メソッド アノテーションとクラス アノテーションです。
コントローラーのメソッド/クラスにあります
機能はメソッドの戻り値に直接応答します。戻り値の型がエンティティオブジェクト/コレクションの場合は、JSON形式の応答に変換されます。
@RestController=@Controller+@ResponseBody
- @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;
- }
- }
テストは郵便配達員に入力されます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);
- }
- }