当前位置: 首页 > news >正文

[SpringMVC]请求响应参数传递

controller前置url解决业务重名

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

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

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注解

@RequestMapping("/test2")@ResponseBodypublic 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注解指明绑定请求体中的参数。该注解用来指定将 哪一个传递过来的参数  赋值给  使用了该注解的业务参数。

实体类参数

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会自动将传递过来的参数创建一个实体类对象,但是前提是请求体中传递来的参数要和实体类中的属性同名,且该实体类的属性有访问途径。

         

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

实体类:

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的相关包:

	<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version></version></dependency>

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

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

日期类型参数

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

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

相关文章:

  • 系统架构师2025年论文《论基于UML的需求分析》
  • SF6气体回收装置参数特点分享
  • 内网穿透快解析免费开放硬件集成SDK
  • STM32——新建工程并使用寄存器以及库函数进行点灯
  • 目标检测中的损失函数(二) | BIoU RIoU α-IoU
  • redis队列 和 秒杀应用
  • 高保真动态项目管理图表集
  • (七)深入了解AVFoundation-采集:采集系统架构与 AVCaptureSession 全面梳理
  • 【解决方法】关于解决QGC地面站4.4.3中文BUG,无法标注航点的问题
  • 【大语言模型DeepSeek+ChatGPT+python】最新AI-Python机器学习与深度学习技术在植被参数反演中的核心技术应用
  • 效率就是竞争力
  • 算法题(130):激光炸弹
  • 每日一题(小白)回溯篇7
  • Vue中如何优雅地阻止特定标签的移除并恢复其原始位置
  • 剑指Offer(数据结构与算法面试题精讲)C++版——day17
  • [c语言日寄]免费文档生成器——Doxygen在c语言程序中的使用
  • 特伦斯便携钢琴V20有哪些优势
  • [预备知识]1. 线性代数基础
  • 4月21日星期一今日早报简报微语报早读
  • 颠覆传统!毫秒级响应的跨平台文件同步革命,远程访问如本地操作般丝滑
  • 群内“分享”侵权书籍电子版,培训公司被判赔偿出版社2万元
  • 今年以来金价涨幅超26%,未来会继续上涨吗?
  • 对话地铁读书人|科研服务者岳先生:地铁适合浅阅读
  • 白宫慌了!将设工作组紧急处理对中国加征关税危机
  • 大理州工业投资(集团)有限公司党委副书记、副总经理赵云接受审查调查
  • 一图看懂|特朗普政府VS美国顶尖高校:这场风暴如何刮起?