SpringBoot教程(五) | SpringBoot中Controller详解

这篇具有很好参考价值的文章主要介绍了SpringBoot教程(五) | SpringBoot中Controller详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

SpringBoot教程(五) | SpringBoot中Controller详解

SpringBoot整合SpringMvc其实千面一直讲的都是。只需要我们在pom文件中引入 web的starter就可以了,然后我们就可以正常使用springMvc中的功能了。所以本篇文章可能更多的是回顾,回顾一下springMVC中的一些常用的功能。

按照正常的流程,我们应该先讲一讲怎么配置视图解析器,但是已经提到了,现在都是前后端分离的项目,后端无需配置页面跳转,只需要返回数据即可,所以这一部分也没必要再讲了。那咱么就介绍下Controller中的常用写法。

上一次我们介绍了 @RestController 注解,这个注解会把所有的返回结果以json(json其实不太准确,应该是可序列化对象,大部分是json形式)的形式进行返回。我们今天来举个例子。

5.1关于@RestController注解

Controller代码:

java复制代码@RestController
public class SecondController {

    @RequestMapping("/second")
    public User second(){
        User u = new User("张胜男", 30,"女");
        return u;
    }
}

这里返回了一个User类。 User类代码如下:

java复制代码package com.lsqingfeng.springboot.vo;

/**
 * @className: User
 * @description:
 * @author: sh.Liu
 * @date: 2022-01-12 11:25
 */
public class User {

    private String name;

    private Integer age;

    private String gender;

    public User(String name, Integer age, String gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    }

    public String getName() {
        return name;
    }

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

    public Integer getAge() {
        return age;
    }

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

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }
}

访问:http://localhost:9090/second 得到结果:

SpringBoot教程(五) | SpringBoot中Controller详解,spring boot,后端,java

看到了返回的就是json类型的数据。这就是 @RestController的作用。如果不用@RestController,我们在方法上加上@ResponseBody是同样的效果。 @RestController注解就是@Controller和@ResponseBody 的组合。

5.2 关于@RequestMapping注解

@RequestMapping注解主要用于标识该Controller的请求地址路径。比如上面路径中的@RequestMapping(“/second”) 就代表通过 /second可以访问到这个接口。这个注解既可以放在类上,也可以放到方法上,如果类上也有这个注解,那么类中所有的controller在访问的时候,都要带上类上的路径才可以访问到。比如:

java复制代码@RestController
@RequestMappin("/test")
public class SecondController {

    @RequestMapping("/second")
    public User second(){
        User u = new User("张胜男", 30,"女");
        return u;
    }
    
    @RequestMapping("/third")
    public User third(){
        User u = new User("张胜", 50, "男");
        return u;
    }
}

比如上面的Controller, 那么我们访问的路径就变成了

ip:port/test/second ip:port/test/third

并且这也是现在最常用的方式,相当于类上的注解里的url作为一个大的分类(一般代表一个模块),方法是模块中的各个功能。

同时还要注意,如果方法上面使用了@RequestMapping 注解来进行标记,那么其实并没有限定这个方法用Http的哪种请求方式来进行访问,所以我们可以用Get请求,也可以用post请求。当然除了这些还有一下不太常用的Delete,put,optio等请求方式。比如我们最上边那个例子:

Get请求访问:

SpringBoot教程(五) | SpringBoot中Controller详解,spring boot,后端,java

Post请求访问:

SpringBoot教程(五) | SpringBoot中Controller详解,spring boot,后端,java

Delete请求访问:

SpringBoot教程(五) | SpringBoot中Controller详解,spring boot,后端,java

但是一般情况下,我们都会限定这个接口只能一某一种请求方式访问,如何限制呢?

方法一: 通过RequestMapping中的参数

java复制代码@RestController
public class SecondController {

    @RequestMapping(value = "/second", method = RequestMethod.GET)
    public User second(){
        User u = new User("张胜男", 30,"女");
        return u;
    }
}

这时候就只能用Get请求来访问了。

SpringBoot教程(五) | SpringBoot中Controller详解,spring boot,后端,java

其他请求方式会报错.

SpringBoot教程(五) | SpringBoot中Controller详解,spring boot,后端,java

方法二: 使用限定请求方式的注解:

如果限定Get请求方式, 用@GetMapping 代替 @RequestMapping\

如果限定Post请求方式, 用@PostMapping 代替 @RequestMapping

比如限定Post请求方式:

java复制代码@RestController
public class SecondController {

    @PostMapping("second")
    public User second(){
        User u = new User("张胜男", 30,"女");
        return u;
    }
}

我们可以看下 @PostMapping注解的实现方式,其实跟方式一是一样的。

SpringBoot教程(五) | SpringBoot中Controller详解,spring boot,后端,java

5.3关于Controller中传参

Get请求传参:

Get请求的参数传递都是通过在url后面拼接来进行传参的, 比如我们传一个name 和age 。url的写法如下:

localhost:9090/third?name=zhangsan&age=20

在请求的路径?后面表示参数,多个参数之间用 & 进行连接。 那么在Controller中如何接收Get请求传递过来的参数呢。方式很多,我们就说两种最常用的

  1. 直接在Controller方法的参数中,用相同的变量名称接收参数。以上面的请求为例
java复制代码@GetMapping("third")
public String third(String name, Integer age){
    System.out.println(name);
    System.out.println(age);
    return "success";
}

SpringBoot教程(五) | SpringBoot中Controller详解,spring boot,后端,java

成功获取参数:

SpringBoot教程(五) | SpringBoot中Controller详解,spring boot,后端,java

  1. 如果参数太多,用上面的方式来写,会导致方法中的参数过多,看起来很乱。所以我们也可以使用一个javaBean来接收。前期就是javaBean中的属性名要和参数名相同,同时要有get和set方法。
java复制代码@GetMapping("getParam")
public User getParam(User user){
    System.out.println(user);
    // 将接收到的参数直接返回
    return user;
}

User类,再给一下:

java复制代码package com.lsqingfeng.springboot.vo;

/**
 * @className: User
 * @description:
 * @author: sh.Liu
 * @date: 2022-01-12 11:25
 */
public class User {

    private String name;

    private Integer age;

    private String gender;

    public User(String name, Integer age, String gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    }

    public String getName() {
        return name;
    }

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

    public Integer getAge() {
        return age;
    }

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

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

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

访问: http://localhost:9090/getParam?name=zhangsan&age=20

gender没有传值,所以是null, 参数接收成功:

SpringBoot教程(五) | SpringBoot中Controller详解,spring boot,后端,java

Post请求传参

Post请求传参的方式,常用的有两种,一中是通过form表单进行传参(就是html中的form),还有一种是通过json的形式传参。目前来说用json的比较多。

  1. Form传参

使用form传参,我们的Controller再接收的时候和上面一样可以直接接收上代码。

java复制代码@PostMapping("postForm")
public User postForm(String name, Integer age){
    User u = new User(name, age, null);
    return u;
}

post请求需要通过postman来模拟了,注意form传参的位置,要在body的form-data里

SpringBoot教程(五) | SpringBoot中Controller详解,spring boot,后端,java

如果参数过多,我们也是可以通过一个javaBean来进行接收的。

java复制代码@PostMapping("postForm2")
public User postForm2(User user){
    return user;
}

SpringBoot教程(五) | SpringBoot中Controller详解,spring boot,后端,java 2. Json 传参

通过json传递的参数,content-type一般为: application/json

我们在接收参数的时候要通过一个新的注解 @RequestBody 来进行标识。

java复制代码// 注意,User中一定要有无参构造方法
@PostMapping("postJson")
public User postJson(@RequestBody User user){
    return user;
}

通过json方式请求,看是否成功获取。

SpringBoot教程(五) | SpringBoot中Controller详解,spring boot,后端,java 3. 关于@RequestParam注解

还有一种方式,这种方式不是很常用,但有的时候,跟三方接口对接的时候,不排除他们使用这种方式。

就是针对content-type是: application/x-www-form-urlcoded (Http协议中,如果不指定Content-Type,则默认传递的参数就是application/x-www-form-urlencoded类型)这是我在网上的资料中找到的,也验证了,如下:

java复制代码@PostMapping("postWWWForm")
public User postWWWForm(@RequestParam String name, @RequestParam Integer  age){
    return new User(name, age, null);
}

SpringBoot教程(五) | SpringBoot中Controller详解,spring boot,后端,java

后来我把@RequestParam 注解去掉了,发现居然也可以接收到参数。其实这个注解就是用来接收普通参数的一个注解。正常情况下应该是可以省略的。什么时候不能省略呢,就是有时候这个参数是必填项,就是必须要传,那么我们可以在这个注解中标识是否必传和默认值。

@RequestParam(value="id",required =false,defaultValue ="10086") Integer id,

默认是true.

好了关于SpringBoot中Controller的传参方式我们就介绍这么多。如有错误也欢迎大家交流指正**。**文章来源地址https://www.toymoban.com/news/detail-793565.html

到了这里,关于SpringBoot教程(五) | SpringBoot中Controller详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序的授权登录-Java 后端 (Spring boot)

    微信开发文档链接:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html 一个可以测试的微信小程序 此微信小程序的APPID和APPscret(至开发者后台获取) 从时序图我们可以了解到流程大致分为两步: 小程序端获取code后传给Java后台 Java后台获取code后向微信后台接口

    2024年02月09日
    浏览(55)
  • “从零开始学习Spring Boot:快速搭建Java后端开发环境“

    标题:从零开始学习Spring Boot:快速搭建Java后端开发环境 摘要:本文将介绍如何从零开始学习Spring Boot,并详细讲解如何快速搭建Java后端开发环境。通过本文的指导,您将能够快速搭建一个基于Spring Boot的Java后端开发环境并开始编写代码。 正文: 一、准备工作 在开始之前,

    2024年02月15日
    浏览(58)
  • SpringBoot教程(一)|认识Spring Boot

    安得广厦千万间,大庇天下寒士俱欢颜,风雨不动安如山,呜呼,何时眼前突兀见此屋,吾庐独破受冻死亦足! Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需

    2024年01月16日
    浏览(51)
  • SpringBoot教程(三) | Spring Boot初体验

    上篇文章我们创建了SpringBoot 项目,并且进行了简单的启动。整个项目了里其实我们就动了两个文件,一个是pom.xml负责管理springboot的相关依赖,一个是springBoot的启动类。 pom文件中通过starter的形式大大简化了配置,不像以前一样需要引入大量的依赖配置,搞不好还得解决冲突

    2024年01月16日
    浏览(49)
  • Spring Boot 中的 @Controller 注解:原理、用法与示例

    Spring Boot 是一个快速开发 Spring 应用程序的框架,它提供了很多有用的功能和特性。其中,@Controller 注解是一个常用的注解,它可以将一个 Java 类标记为 Spring MVC 中的控制器。本文将介绍 Spring Boot 中 @Controller 注解的原理、用法和示例。 在 Spring MVC 中,@Controller 注解用于标识

    2024年02月07日
    浏览(54)
  • Spring Boot 单元测试(Controller测试与Service测试)

    🎈博客主页:🌈我的主页🌈 🎈欢迎点赞 👍 收藏 🌟留言 📝 欢迎讨论!👏 🎈本文由 【泠青沼~】 原创,首发于 CSDN🚩🚩🚩 🎈由于博主是在学小白一枚,难免会有错误,有任何问题欢迎评论区留言指出,感激不尽!🌠个人主页 @SpringBootTest相当于springMvc中单元测试中的

    2023年04月26日
    浏览(50)
  • Spring Boot 整合 Swagger 教程详解

    ✅作者简介:2022年 博客新星 第八 。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏:SpringBoot 框架从入门到精通 ✨特色专栏:国学周更-心性养成之路 🥭本文内容:Spring Boot 整

    2023年04月14日
    浏览(47)
  • spring boot学习第六篇:SpringBoot 集成WebSocket详解

    1、WebSocket简介 WebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工(full-duplex)通信——允许服务器主动发送信息给客户端。 2、为什么需要WebSocket HTTP 是基于请求响应式的,即通信只能由客户端发起,服务端做出响应,无状态,无连接。 无状态:每次连

    2024年01月21日
    浏览(52)
  • 阿里通义千问API(Java)使用教程,基于Springboot后端

    1.1 登录阿里云官网并搜索模型服务灵积,开通key 1.2 点击上图中的控制台并进入 1.3 创建key 2.1 导入以下俩个坐标 2.2 编写Controller层  这里controller层并未将前端的请求数据传入给api中的参数,有需求的可以自己加一下,这里就使用浏览器测试一下看是否返回数据即可  2.3 Ser

    2024年04月09日
    浏览(128)
  • Spring Boot进阶(48):【实战教程】SpringBoot集成WebSocket轻松实现实时消息推送

            WebSocket是一种新型的通信协议,它可以在客户端与服务器端之间实现双向通信,具有低延迟、高效性等特点,适用于实时通信场景。在SpringBoot应用中,集成WebSocket可以方便地实现实时通信功能,如即时聊天、实时数据传输等。         本文将介绍如何在Sprin

    2024年02月09日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包