Spring MVC 请求映射路径的配置,实现前后端交互

2023-09-08 17:13:52

目录

一、什么是请求映射路径

二、Spring MVC的请求参数

三、日期类型的参数传递

四、Spring MVC如何响应 JSON 数据


一、什么是请求映射路径

在Spring MVC中,请求映射路径(Request Mapping Path)是指与特定的请求处理方法关联的URL路径。通过在Spring MVC的控制器类上使用注解(如@RequestMapping)或配置(如<mvc:request-mapping>)来指定请求映射路径,可以将不同的HTTP请求映射到相应的处理方法上。

例如,如果你在控制器类上使用@RequestMapping("/hello")注解,那么当接收到路径为"/hello"的HTTP请求时,Spring MVC将自动调用该控制器类上与该路径匹配的方法来处理该请求。

请求映射路径可以包含占位符和通配符,以便将多个不同的URL路径映射到同一个处理方法上。例如,@RequestMapping("/users/{id}")可以将路径为"/users/1"、"/users/2"等所有以"/users/"开头的请求映射到同一个处理方法上。

在Spring MVC中,请求映射路径与处理方法参数的注解(如@PathVariable@RequestParam等)一起使用,可以方便地获取请求中的参数值。

二、Spring MVC的请求参数

在Spring MVC中,请求参数可以通过多种方式传递给控制器。以下是一些常见的请求参数类型:

简单类型(Simple types):例如,字符串(String)、整数(Integer)、布尔值(Boolean)等。可以直接作为请求参数。

@RequestMapping("/example")
public String example(@RequestParam String name, Model model) {
    model.addAttribute("name", name);
    return "example";
}

复杂类型(Complex types):例如,对象、数组、集合等。可以通过使用@RequestBody注解或者@RequestParam注解来接收。

使用@RequestBody接收JSON数据:

@RequestMapping(value = "/example", method = RequestMethod.POST)
public String example(@RequestBody ExampleObject exampleObject) {
    // 处理exampleObject
    return "example";
}

使用@RequestParam接收多个参数:

@RequestMapping("/example")
public String example(@RequestParam("param1") String param1, @RequestParam("param2") Integer param2) {
    // 处理param1和param2
    return "example";
}

文件上传(File upload):可以使用@RequestParam("file") MultipartFile file来接收文件。

@RequestMapping(value = "/example", method = RequestMethod.POST)
public String example(@RequestParam("file") MultipartFile file) {
    // 处理文件
    return "example";
}

多个参数(Multiple parameters):如果有多个参数,可以将它们放在一个类中,然后将这个类作为参数传递。

public class ExampleParameters {
    private String param1;
    private Integer param2;
    // getters and setters
}

然后在控制器中使用:

@RequestMapping("/example")
public String example(@RequestBody ExampleParameters parameters) {
    // 处理parameters的param1和param2
    return "example";
}

路径变量(Path variables):如果URL包含路径变量,可以使用@PathVariable来接收。例如,/user/{id}中的{id}可以使用@PathVariable("id") String id来接收。

@RequestMapping("/user/{id}")
public String user(@PathVariable("id") String id) {
    // 处理id
    return "user";
}

三、日期类型的参数传递

在Spring MVC中,日期类型的参数可以通过多种方式进行传递。最常见的方式是通过表单的<input type="date">字段或者通过JSON对象。

通过HTML表单传递日期

如果你的日期参数通过HTML表单提交,例如使用<input type="date">,Spring会自动将该值转换为java.util.Date类型。

例如,你的表单可能如下:

<form method="post" action="/your-endpoint">
    <input type="date" name="yourDate">
    <input type="submit" value="Submit">
</form>

在你的Controller中,你可以直接接收一个java.util.Date类型的参数:

@PostMapping("/your-endpoint")
public String yourMethod(@RequestParam("yourDate") Date date) {
    // ... do something with date ...
    return "your-view-name";
}

四、Spring MVC如何响应 JSON 数据

Spring MVC 是一个非常强大的框架,它允许我们以模块化和灵活的方式开发 Web 应用程序。在 Spring MVC 中,我们可以很容易地处理和响应 JSON 数据。

下面是一个简单的例子,展示了如何在 Spring MVC 中创建一个控制器(Controller)来响应 JSON 数据。

首先,确保你的项目中已经包含了 Spring MVC 的依赖。

创建一个 Java 类来表示你要传输的 JSON 数据。这个类可以是一个简单的 POJO(Plain Old Java Object),也可以是一个复杂的 Java Bean。例如:

public class Person {
    private String name;
    private int age;

    // Getters and Setters
    // ...
}

创建一个 Spring MVC 控制器(Controller)。在这个控制器中,你可以使用 @RequestMapping 注解来指定请求的 URL,并使用 @ResponseBody 注解来指定返回的数据类型为 JSON。例如:

import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/persons")
public class PersonController {

    // 使用 @RequestBody 注解来接收 JSON 数据
    @PostMapping("/create")
    public Person createPerson(@RequestBody Person person) {
        // 在这里处理 person 数据,并创建新的 Person 对象或执行其他操作
        // ...
        return person;
    }

    // 使用 @RequestBody 注解来接收 JSON 数据,并通过自定义的 HttpMessageConverter 将 JSON 转换为 Person 对象
    @PostMapping("/createFromJsonString")
    public Person createPersonFromJsonString(@RequestBody String jsonString) {
        ObjectMapper objectMapper = new ObjectMapper();
        try {
            Person person = objectMapper.readValue(jsonString, Person.class);
            // 在这里处理 person 数据,并创建新的 Person 对象或执行其他操作
            // ...
            return person;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }
}

在你的 web.xml 文件中配置 DispatcherServlet。这个 Servlet 是 Spring MVC 的核心部分,负责接收和分发请求。例如:

<web-app>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/applicationContext.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

在 applicationContext.xml 中配置 Spring MVC 的组件。例如:

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
    <property name="basename" value="messages"/>
</bean>
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.FixedLocaleResolver">
    <property name="defaultLocale" value="en"/>
</bean>
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/jsp/"/>
    <property name="suffix" value=".jsp"/>
</bean>

更多推荐

并发编程——ReentrantReadWriteLock

文章目录为什么要出现读写锁读写锁的核心思想写锁的操作写锁加锁-acquire写锁-释放锁操作读锁的操作读锁的加锁操作总结为什么要出现读写锁因为ReentrantLock是互斥锁,如果有一个操作是读多写少,同时还需要保证线程安全,那么使用ReentrantLock会导致效率比较低。因为多个线程在对同一个数据进行读操作时,

mysql常用数据类型(mysql数据类型)字符集

文章目录mysql常用数据类型什么时候用等长数据类型,什么时候用变长数据类型?什么时候用char,什么时候用binary?怎么区分文本数据和二进制数据?mysql字符集与数据类型的区别与联系mysql常用数据类型MySQL支持多种数据类型,以下是一些最常用的:数值类型:INT:用于存储整数。FLOAT:用于存储浮点数。

MYSQL的多版本并发控制MVCC(Multi-Version Concurrency Control)

1、概述MVCC是一种用于数据库管理系统的并发控制技术,允许多个事务同时访问数据库,而不会导致读写冲突。也就是说在读写的时候,线程不用去争抢读写锁。因为加锁的过程比较耗性能。当然很多时候还是必须的,不能避免,比如说,去ATM机取钱的时候,同时又在手机APP上进行提现,这种操作就需要加锁,不能让其同时提现,一次只能一个操

MySQL-三大日志

前言​redolog:为了持久化数据,当内存中的数据还没写入到磁盘而宕机时,会读取该日志持久化数据到磁盘​undolog:为了保证原子性,事务的操作都会记录一条相反的sql到该日志,出现错误就会根据该文件恢复事务之前的数据​binlog:为了复制和恢复数据,mysql重启可以通过该日志恢复​以上三大日志是MySQL的原

MySQL高频面试题

1.数据库存储引擎有:MyIsam、InnoDB、Memory、Archive、Federated2.InnoDB采用的是B+树结构存储,B树的每个节点对应innoDB的一个page,一个page的大小一般为16K,非叶子节点只有键值,叶子节点包含完整数据适用场景:1)经常更新的表,适合处理多重并发的更新请求。2)支持

静态顺序表及基本操作具体实现

静态顺序表及几个基本操作🎑定义一个顺序表🎑初始化——置空顺序表🎑创建一个顺序表🎑打印顺序表各结点的值🎊🎊顺序表基本操作🎃头插🎃尾插🎃头删🎃尾删🎊🎊查找🎋查找第i个节点的值🎋查找值为x的结点🎋在主函数中实现🎊🎊插入🎋在第i个位置添加元素x🎋在主函数中实现🎊🎊删除🎋删除顺序表中p

面试问题之如何解释微服务

这次的面试还是感觉非常愉快,没有那么憋屈,问的问题也非常有意思。问题假设现在有一个人完全不懂微服务,你能和对方解释下什么是微服务吗?面试回答这个问题如果要完全回答好,感觉不是那么容易。什么是微服务很多人都知道现代的开发流程多是前后端分离,后端采用部署服务的方式来提供服务。这种服务是可以根据业务来进行区分,也可以是根据架

Jmeter怎么实现接口关联?

用于接口测试时,后一个接口经常需要用到前一次接口返回的结果,应该如何获取前一次请求的结果值,应用于后一个接口呢,拿一个登录的例子来说明如何获取。1、打开jmeter,新建一个测试计划,在测试计划里新建一个线程组,新建一个登录的http请求,如图所示:2、查看登录返回的结果:3、充值接口需登录后才能操作,此时可以使用co

Hive 优化建议与策略

目录​编辑一、Hive优化总体思想二、具体优化措施、策略2.1分析问题得手段2.2Hive的抓取策略2.2.1策略设置2.2.2策略对比效果2.3Hive本地模式2.3.1设置开启Hive本地模式2.3.2对比效果2.3.2.1开启前2.3.2.2开启后2.4Hive并行模式2.5Hive严格模式2.5.1严格模式实现

Swift学习内容精选(二)

Swift类是构建代码所用的一种通用且灵活的构造体。我们可以为类定义属性(常量、变量)和方法。与其他编程语言所不同的是,Swift并不要求你为自定义类去创建独立的接口和实现文件。你所要做的是在一个单一文件中定义一个类,系统会自动生成面向其它代码的外部接口。类和结构体对比Swift中类和结构体有很多共同点。共同处在于:定

ZooKeeper学习笔记

目录1概述2安装3zoo.cfg配置4zk集群配置5客户端5.1节点类型5.2节点数据操作5.3监听器6springboot客户端7服务注册与发现7.1zk集群端7.2业务服务端7.3业务客户端8分布式锁9Curator框架1概述zk是基于观察者模式设计的;(观察者模式)zk是一个服务管理框、协调框架;zk服务本身也是

热文推荐