Springboot请求响应练习

news2024/9/25 23:22:31

        Springboot对于不同的请求进行响应

package com.wzb.ResponseExercise20240919;


import com.wzb.ResponseExercise20240919.Result.Result;
import com.wzb.ResponseExercise20240919.pojo.User;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.List;


// 添加RestController注解,表示此类中所有方法的返回值都作为浏览器的响应数据

@RestController
public class ResponseExercise {
    // Controller方法中,已经设置了响应浏览器请求的数据
    // Controller方法中的return的结果,是通过@ResponseBody注解响应给浏览器的

    // @ResponseBody注解
    // 1.类型:方法注解,类注解;可以为类或者方法进行注解
    // 2.位置:书写在@Controller方法或者类上
    // 3.作用:将方法返回值直接响应给浏览器(如果方法返回值是实体对象/集合),那么将会转换为json格式后再响应给浏览器

    // 但是在一般的书写中,只是在类上添加了@RestController的注解,方法添加了@RequestMapping注解,并没有直接使用@RespondBody注解
    // 是因为@RestContorller是一个组合注解,是@Controller和@ResponseBody的组合,所以说不需要直接使用@RespondBody就可以响应浏览器

    // 可以理解为添加了@RestController注解就相当于添加了@ResponseBody注解

    // 类上有@RestController注解或者@ResponseBody注解时,表示当前类下所有的方法的返回值都作为浏览器的响应参数


    /* 无参数的请求 */
    @RequestMapping("/Hello")
    public Result function() {
        System.out.println("hello world");
        return Result.success("Hello World");
    }

    /* 请求普通参数 */
    @RequestMapping("/simpleParam")
    public Result simpleParam(String name) {
        System.out.println("I am " + name);
        return Result.success(("I am " + name));
    }

    /* 请求普通参数的复杂写法 */
//    @RequestMapping("/simpleParam")
//    public String simpleParam(HttpServletRequest request) {
//        String name = request.getParameter("name");
//        int age = Integer.parseInt(request.getParameter("age"));
//        System.out.println(name + ": " + age);
//        return (name + ": " + age);
//    }

    /* 请求实体对象 */
    /* 若响应的是实体对象,那么前端将会以json格式展示出来 */
    @RequestMapping("/simplePojo")
    public Result simplePojo (User user) {
        System.out.println(user);
        return Result.success(user);
    }

    /* 请求数组 */
    @RequestMapping("/simpleArray")
    public Result simpleArray(String[] hobby) {
        System.out.println(Arrays.toString(hobby));
        return Result.success(hobby);
    }

    /* 请求集合 */
    /* 因为默认是响应数组,所以说想要响应集合需要用@RequestParam注解 */
    @RequestMapping("/simpleList")
    public Result simpleList(@RequestParam List<String> hobby) {
        System.out.println(hobby);
        return Result.success(hobby);
    }

    /* 请求时间日期参数 */
    @RequestMapping("/updateTime")
    public Result dateParam(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime updateTime) {
        System.out.println("现在的时间是: " + updateTime);
        return Result.success(updateTime);
    }

    /* 请求json参数 */
    @RequestMapping("/jsonParam")
    public Result jsonParam(@RequestBody User user) {
        System.out.println(user);
        return Result.success(user);
    }
}

        User类

package com.wzb.ResponseExercise20240919.pojo;

public class User {
    private String name;
    private int age;
    private Address address;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", address=" + address +
                '}';
    }
}

        Address类

package com.wzb.ResponseExercise20240919.pojo;

public class Address {
    private String province;
    private String city;

    public String getProvince() {
        return province;
    }

    public void setProvince(String province) {
        this.province = province;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    @Override
    public String toString() {
        return "Address{" +
                "province='" + province + '\'' +
                ", city='" + city + '\'' +
                '}';
    }
}

        统一返回结果Result

package com.wzb.ResponseExercise20240919.Result;

public class
Result {
    private Integer code;  // 响应状态码:1代表成功;0代表失败
    private String message;  // 状态码信息 描述的字符串
    private Object data;  // 返回的数据,因为是返回的数据千奇百怪,所以说用顶级父类Object当作数据的类型

    public Result() {}

    public Result(Integer code, String message, Object data) {
        this.code = code;
        this.message = message;
        this.data = data;
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }

    // 为了提高效率,为成功响应和失败响应分别封装静态方法

    // 成功响应(不需要给前端返回数据)
    public static Result success() {
        return new Result(1, "success", null);
    }

    // 成功响应(需要给前端返回数据)
    public static Result success(Object data) {
        return new Result(1, "success", data);
    }

    // 失败响应
    public static Result error(String message) {
        return new Result(0, "Fail", null);
    }
}

        统一返回测试 

 

package com.wzb.ResponseExercise20240919;

import com.wzb.ResponseExercise20240919.Result.Result;
import com.wzb.ResponseExercise20240919.pojo.User;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ResponseTogetherExercise {
    /* 响应的值多种多样,没有规范;不便于前后端分离开发:前端若拿到响应的数据,没有统一的规范,那么需要对不同的数据
       进行不同的解析,成本高、效率低、维护困难 */

    /* 所以说一般在开发中,定义一个统一的返回结果,所有请求都返回这个类型的结果,便于开发 */

    /* 这个统一的返回结果应该包含:
       1.响应状态码:当前的请求的成功还剩失败
       2.状态码信息:给页面的提示信息
       3.返回的数据:给前端响应的数据(字符串、对象、集合;所以说要用Object定义数据类型)*/

    /* 有了统一的返回结果Result之后,就可以对Controller进行改造 */

    @RequestMapping("/simplePojoTogether")
    public Result simplePojo(User user) {
        System.out.println(user);
        /* 能够走到这一步,那么说明成功响应了 */
        return Result.success(user);
    }

}

         

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2165096.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

小孩真的需要手机上学吗?怎样远程了解他在学校用iPhone干什么?

互联网在教育、娱乐、社交等多个领域发挥着重要作用&#xff0c;成为孩子们获取知识、放松娱乐的重要渠道。孩子们首次接触互联网的年龄越来越小&#xff0c;有的甚至在幼儿园阶段就开始使用智能设备。 一些学校推行电子书包、网络作业等&#xff0c;虽然提高了效率&#xff0c…

【Golang】Go语言中如何面向对象?

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

Vue3:toRaw与markRaw

目录 一.toRaw 1.性质 2.作用 二.markRaw 1.性质 2.作用 三.toRaw的使用 四.markRaw的使用 五.代码示例 在Vue 3中&#xff0c;toRaw和markRaw是两个用于处理响应式对象的全局函数。 一.toRaw 1.性质 toRaw是一个全局函数&#xff0c;它接受一个由reactive或ref生成…

JS面试真题 part6

JS面试真题 part6 26、如何判断一个元素是否在可视区域中27、什么是单点登录&#xff1f;如何实现28、 如何实现上拉加载&#xff0c;下拉刷新29、说说你对正则表达式的理解&#xff1f;应用场景&#xff1f;30、说说你对函数式编程的理解&#xff1f;优缺点 26、如何判断一个元…

Vue74 路由的props配置

笔记 ​ 作用&#xff1a;让路由组件更方便的收到参数 {name:xiangqing,path:detail/:id,component:Detail,//第一种写法&#xff1a;props值为对象&#xff0c;该对象中所有的key-value的组合最终都会通过props传给Detail组件// props:{a:900}//第二种写法&#xff1a;props…

《动手学深度学习》笔记1.11——实战Kaggle比赛:预测房价+详细代码讲解

目录 0. 前言 原书正文 1. 下载和缓存数据集 1.1 download() 下载数据集 1.2 download_extract() 解压缩 2. Kaggle 简介 3. 访问和读取数据集 4. 数据预处理 5. 训练&#xff08;核心难点&#xff09; 5.1 get_net() 定义模型-线性回归 5.2 log_rmse() 对数均方根…

见合八方亮相重庆光纤传感大会(OFS China-2024)

2024年9月20日至22日&#xff0c;第十二届中国光纤传感大会&#xff08;OFS China-2024&#xff09;在重庆成功举办&#xff0c;该大会旨在展示光纤传感技术在多个领域的最新研究成果&#xff0c;推动该技术的产业化进程。 在本次大会上&#xff0c;天津见合八方光电科技有限公…

JDK1.8与JDK17相互切换

&#x1f4d6; 前言&#xff1a;在电脑已经安装jdk17后&#xff0c;发现有些项目不兼容&#xff0c;需要用到以前的jdk1.8&#xff0c;本文介绍简单切换的方法。 &#x1f50e; 甲骨文jdk1.8官网下载 下载完jdk1.8后&#xff0c;可以将其与jdk17放在同一目录层级下。 搜索栏直…

我眼中的Token2049 是一场加密大秀

今年Token2049&#xff0c;其实我也收到很多来自币圈朋友、项目方或交易所的邀请&#xff0c;都一一婉拒了。因为每年9月&#xff0c;都是我一年来最忙碌的日子。一方面进入金九银十的销售旺季&#xff0c;另外副业也需要谈一些团购业务。 我喜欢Web3&#xff0c;也曾是 #Bitg…

《操作系统 - 清华大学》1 -1:操作系统概述 —— 内容概述

文章目录 1. 内容摘要2. 实验内容 1. 内容摘要 在这里对学习内容做一个整体上的介绍&#xff0c;那在这里包括我们要学习的内容&#xff0c;实验的内容。操作系统课涉及到计算机系统当中的资源管理&#xff0c;所以我们围绕着操作系统的实现来介绍相关内容&#xff0c;那主要分…

Java之路--瓦解逻辑控制与方法使用已是瓮中捉鳖

嗨嗨大家&#xff01;今天我们来学习逻辑运算和方法的使用~ 目录 一 逻辑控制 1 分支结构 1.1 if语句 1.2 switch 语句 2 循环结构 2.1 while 循环 2.2 for 循环 2.3 do while 循环 2.4 break 2.5 continue 3. 输出输入 二、方法的使用 1 方法定义语法 2 实参和…

NCU-机器学习-作业3:RANK: 0.0代码(No)

想体验一把No.1的快乐吗&#xff1f;话不多说直接上代码。 代码&#xff1a; import osimport pandas as pd from sklearn.preprocessing import StandardScaler from sklearn.svm import SVC import numpy as npdef get_dataset(path):dataset, labels [], []filenames os…

SDK使用指南

本文档主要讲解音视频终端 SDK 产品家族下各子产品的能力支持及购买方式&#xff0c;并提供了相关 Demo 和 SDK 集成资源&#xff0c;具体体验步骤如下&#xff1a; 步骤一&#xff1a;了解产品 1.1 音视频终端 SDK 产品家族介绍 音视频终端 SDK&#xff08;腾讯云视立方&…

python基础之绘图turtle与分词

python基础 1.学习目的2.实验2.1实验一2.2实验二 3.实验代码及结果 1.学习目的 python库很多&#xff0c;所以我们要在空闲之余学习我们没有遇到的库&#xff0c;就比如turtle和分词库 2.实验 2.1实验一 2.2实验二 3.实验代码及结果 # File: turtle库.py # Author: chen_so…

第L2周:机器学习|线性回归模型 LinearRegression:1. 简单线性回归模型

本文为&#x1f517;365天深度学习训练营 中的学习记录博客原作者&#xff1a;K同学啊 任务&#xff1a; ●1. 通过本文学习LinearRegression简单线形回归模型。 ●2. 模仿本文代码&#xff0c;通过鸢尾花花瓣长度预测花瓣宽度。 一、概念 什么是回归 回归的目的是为了预测&…

Vue3入门 - ElementPlus中左侧菜单和Tabs菜单组合联动效果

在Vue3中&#xff0c;ElementPlus是使用比较广泛的UI组件库&#xff0c;提供了丰富的界面元素支持项目开发需求。在后台管理系统中&#xff0c;左侧或顶部的菜单栏通常包含多个子菜单项&#xff0c;通过菜单的展开和收缩功能&#xff0c;用户可以方便地查看或隐藏不需要的菜单项…

Centos7.9安装.Net 8.0框架

1.背景 在Centos7.9编译运行Net8.0项目时&#xff0c;会用到.Net8.0框架。所以我实操了如何在Centos7.9去安装.Net8.0框架。本文记录了相关操作过程&#xff0c;是一个比较好的参考。 2.操作 2.1 安装框架 sudo rpm -Uvh https://packages.microsoft.com/config/centos/8/pa…

一文理解AXI4-lite与AXI4-stream协议

AXI4-lite与AXI4-stream协议 上篇博文《AMBA3.0 AXI总线入门》浅要介绍AXI4总线协议&#xff0c;AXI总线作为一种总线&#xff0c;可以挂载多个主设备&#xff08;master&#xff09;和从设备&#xff08;slave&#xff09;&#xff0c;AXI总线协议定义了主设备和从设备之间如何…

Docker本地部署Chatbot Ollama搭建AI聊天机器人并实现远程交互

文章目录 前言1. 拉取相关的Docker镜像2. 运行Ollama 镜像3. 运行Chatbot Ollama镜像4. 本地访问5. 群晖安装Cpolar6. 配置公网地址7. 公网访问8. 固定公网地址 前言 本文主要分享如何在群晖NAS本地部署并运行一个基于大语言模型Llama 2的个人本地聊天机器人并结合内网穿透工具…

Web安全-SQL注入之联合查询注入

声明 环境 墨者学院-SQL手工注入漏洞测试(MySQL数据库-字符型) 判断是否存在漏洞 http://124.70.64.48:42937/new_list.php?idtingjigonggao and 12-- and 11正常 http://124.70.64.48:42937/new_list.php?idtingjigonggao and 12-- and 12出错&#xff0c;存在字符型注入…