[SpringMVC]请求响应参数传递

controller前置url解决业务重名

在项目中,常常会碰到不同的业务之间的某个方法同名的情况。例如在一个文档管理系统(有着文档和发布者两个实体)中,两个实体都有着 "add" 业务。如果两个实体相关的业务url都用 "/add" ,会导致服务器无法确认是哪一个导致报错。

解决的方法就是在两个业务的控制器类前加一个前置url:

java 复制代码
package controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
@RequestMapping("/text")//前置url
public class Text {
    @RequestMapping("/add")
    public String test1(@RequestParam("username") String username, @RequestParam("password") String password) {
        if(username.equals("liu") && password.equals("123")) {
            System.out.println("添加成功");
            return "success";
        }
        return "failure";
    }
}

请求体数据

这些controller类就类似javaweb中的Servlet类。控制器类会自动将请求体中的有关数据处理后作为方法的参数(可以理解为servlet类中使用session获取请求参数),而return的数据则作为返回数据。

响应的数据

controller类中的方法返回的数据,如果仅仅使用了@Controller注解,会默认你返回的是一个视图,也就是.jsp、.html等网页源代码文件,比如返回一个字符串 "login",tomcat服务器从后端拿到数据后会返回给客户端/login.jsp。

如果你想将return的数据转化为响应体中的数据来进行返回,那么需要在方法前面额外添加@ResponseBody注解:

java 复制代码
@RequestMapping("/test2")
    @ResponseBody
    public String test2(@RequestParam("name") String string,int age, User user) {
        System.out.println(string);
        System.out.println(age);
        System.out.println(user.getName());
        System.out.println(user.getAge());
        return "failure";
    }

当作为响应体数据时,mvc默认会自动将各种数据(包括实体类)转换为json格式。

传参

常见的字符串和数值类型

请求体中的参数名与方法列表中一致时,SpringMVC会自动识别,不需要额外操作。

当请求体方法中的参数名与方法参数列表不一致时, 需要额外使用**@RequestParam**注解指明绑定请求体中的参数。该注解用来指定将 哪一个传递过来的参数 赋值给 使用了该注解的业务参数。

实体类参数

java 复制代码
public class User {
    private String name;
    private int age;

    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;
    }
}

如果业务方法里需要的参数是个实体类,MVC会自动将传递过来的参数创建一个实体类对象,但是前提是请求体中传递来的参数要和实体类中的属性同名,且该实体类的属性有访问途径。

如果实体类参数中还有实体类参数,那么请求体中的参数应为 父类中实体类属性名.子属性实体类的属性名:

实体类:

java 复制代码
public class Student {
    private String name;
    private User user;

    public String getName() {
        return name;
    }

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

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }
}

接收集合类型数据

对于集合类型数据,我们要使用@RequestParam注解告诉MVC,把该对象作为集合来处理,而不是一个普通的实体类对象。

json格式数据

如果要接收json数据,我们需要引入解析json的相关包:

XML 复制代码
	<dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version></version>
    </dependency>

然后我们需要在springMVC配置类中使用注解@EnableWebMvc开启相关功能。

同时因为json的数据在body中,我们需要在业务方法的参数列表中使用@RequestBody注解:

日期类型参数

当日期类型的格式是年/月/日这种时,只需要用Date类对象接收即可。

但是当格式是年-月-日这种时,就需要用注解@DateTimeFormat(pattern = "指定格式")来进行处理才不会报错:

相关推荐
CarIise8 小时前
Spring 框架AOP与 XML 基础
java·开发语言
m0_639906948 小时前
SpringBoot 实现大模型统一调度网关|对接 OpenAI、Claude 协议差异与适配方案
java·spring boot·spring
雪芽蓝域zzs8 小时前
第 1 章:IDEA 全局配置 Maven + 新建 SpringBoot3 Maven 项目
java·maven·intellij-idea
墨林陌8 小时前
AI 热点日报(2026-11-03):美团发布 1.6 万亿参数国产大模型,四大厂商共推 AI 训练退出标准
前端
Moment8 小时前
DeepSeek 发布新模型,直接把 Agent 联网搜索的门槛打下来了!
前端·后端
geovindu8 小时前
rust:N-Barrier Pattern
开发语言·后端·设计模式·rust·屏障模式·并发型模式
AI宇宙狂想家8 小时前
开源 AI 视频工具进化史:从难用到好用,OpenMontage 改了什么
开发语言·前端·人工智能·开源·ai创业·openmontage
代码什么用8 小时前
Maven&Nexus
java·maven
顧棟9 小时前
OpenAPI 网关:鉴权 + 流量治理 一体化设计方案与实现
java·spring boot·设计模式
Rain的Java大神之路9 小时前
「设计一个在线文档协同编辑系统」:从 WebSocket、OT/CRDT 到快照回放,一篇讲透这道面试顶流题
java·后端·面试