前后端交互:前端传递数据是json格式

java 接收参数或数据的方式可以看另外一篇 java接收数据的方式

这篇文章记录的是前后端在交互时,数据以json的格式进行传递,一般会使用第三种方案接收多个数据,主要是记录使用 @RequestBody 接收前端数据的方案,前两种只是可以接收到数据,一般使用第三种接收数据。

本文章中的例子,前端使用的语言是vue,后端使用的语言是 java。整篇文章使用的数据例子(json格式)如下:

{
    "name": "testfilename.xlsx",
    "list": [
        { 
            "row": "1", 
            "col": "A", 
            "value": "77"
        },
        { 
            "row": "2", 
            "col": "B", 
            "value": "88"
        },
        { 
            "row": "3", 
            "col": "C", 
            "value": "99"
        },
    ]
}

前端发送数据

前端发送数据的格式,以 json 的格式传递数据。前端核心代码如下:

let data = {
    name: 'testfilename.xlsx',
    list: [ 
        { row: 1, col: 'A', value: '88' },
        { row: 2, col: 'B', value: '99' },
        { row: 3, col: 'C', value: '77' },
    ]
}  // 带发送的数据
this.axios.post('/test', data).then((res) => {
    console.log(res)
}, (error) => {
    console.log(error)
})

后端接收数据

这里后端使用了 jackson 工具处理 json 数据。所以,先在 pom.xml 中导入依赖

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

下面记录的是两种接收json数据的方式。一种是把json数据接收到一个字符串中,一种是把json数据接收到Map中。根据不同的需要接收json数据,方便后续对数据的处理。

方案一:接收全部数据(String类型的变量)

把前端发送的全部数据接收到一个 String 类型的变量( params )中,然后通过json转换把变量 (params) 的所有值存储到一个对象 (DataObject) 中,以方便后续可能会以对象的形式对从前端接收的数据进行处理。

@PostMapping("/test")
public String test(@RequestBody String params) throws IOException {
    System.out.println("params: " + params);  // 打印接收到的数据
    ObjectMapper mapper = new ObjectMapper();  // 创建ObjectMapper对象
    DataObject value = mapper.readValue(params, DataObject.class);//反序列化JSON到对象。
    System.out.println("value: " + value.toString()); // 打印转换之后的对象的信息
    return "ok";
}

通过 @RequestBody 将前端发送的所有数据接收到一个 String 类型的变量( params )中。然后,通过 jacksonmapper.readValue 将json字符串转换为某个对象。

上面代码中自定义的接收数据的 DataObject 对象定义如下(只给出了所有属性):

public class DataValue {
    private String name;
    private List<Map<String, Object>> list;
}

为什么属性的类型是上面这个样子呢??

name 使用 String 类型接收,应该是很容易理解的,前端发送的数据 'testfilename.xlsx' ,就是一个简单的字符串。

那么 list 为什么使用 List<Map<String, Object>> 的类型接收呢??从外到里看。

首先,list 是一个数组,所以用 List<> 来接收。然后 <> 中要写什么呢?

{row: 1, col: 'A', value: '88'} 为例,这可以看作是一个 Map<> ,键是 String 类型,由于3个键对应的值的类型不相同,所以这里使用 Object 作为值的类型。综合起来,就是 Map<String, Object> 的类型。

因此,list 使用 List<Map<String, Object>> 可以接收到前端发送的 lsit 数据。

到这里,把前端发送的数据就接收到了某个具体的对象中了,我们也就可以把前端发送的有多个变量的数据以一个对象实例去处理。

方案二:接收每个数据(Map类型的变量)

通过 @RequestBody 将前端发送的所有数据接收到一个 Map<String, Object> 类型的变量(params)中。然后,从变量(params)中获取需要的键对应的值。

@PostMapping("/test")
public String test(@RequestBody Map<String, Object> params) throws IOException {
     // 获取参数 params 中键为 name 的值
    String name  = (String) params.get("name"); 
     // 获取参数 params 中键为 list 的值
    List<Map<String, Object>> list = (List<Map<String, Object>>) params.get("list");
    System.out.println("name: " + name);  // 打印接收到的 name 变量的值
    System.out.println("list: " + list.toString());  // 打印接收到的 list 变量的值

    return "ok";
}

当然,也可以把 list 数据存到一个对象中,因为有些情况可能需要把json中的部分数据转换到对象中。

如果有这么一种情况,我只需要把前端的 {row: 1, col: 'A', value: '88'} 这部分封装为一个对象,那么,就需要单独获取到json中的某些值。

抽象出来的对象定义如下(只给出了属性):

public class MapValue {
    private Integer rowIndex;
    private String colIndex;
    private String value;
}

那么接收json数据的代码就可以修改为以下:

@PostMapping("/test")
public String test(@RequestBody Map<String, Object> params) throws IOException {
    String name  = (String) params.get("name");
    List<MapValue> list = (List<MapValue>) params.get("list");
    System.out.println("name: " + name);
    System.out.println("list: " + list.toString());

    return "ok";
}

方案三:用对象接收全部数据(推荐)

Java 需要创建一个对象(比如创建了一个 DataObject 对象)用于接收前端的数据。这个对象 DataObject 是一个实体类,只包含属性和 get/set 方法。同时这个接收对象的属性名和前端传递的数据名要一一对应,名字不同也不会接收到。以前面传递的数据为例,创建一个对象用来接收数据,对象如下:

/**
	name: 'testfilename.xlsx',
    list: [ 
        { row: 1, col: 'A', value: '88' },
        { row: 2, col: 'B', value: '99' },
        { row: 3, col: 'C', value: '77' },
    ]
*/
public class DataObject {
    private String name,
    List<Cell> cellList; 
    // 省略 get/set/toString 方法
}

/**
{ row: 1, col: 'A', value: '88' } 
这个数据可以使用三元组定义,也可以重新创建一个对象
*/
public class Cell {
    private String row;
    private String col;
    private String value;
    
    // 省略 get/set/toString 方法
}

这样,把前端发送的全部数据接收到一个对象 DataObject

@PostMapping("/test")
public String test(@RequestBody DataObject data) throws IOException {
    System.out.println("data: " + data.toString());  // 打印接收到的数据
    return "ok";
}
<think>好的,用户想知道如何在Word中将英文小写字母转换为大写。首先,我需要回忆一下自己知道的Word功能。常用的方法可能有使用快捷键,或者通过菜单栏的字体设置来更改大小写。对了,我记得Shift+F3这个快捷键可以在不同的大小写格式之间切换,比如全大写、全小写或者首字母大写。这个应该适用于选中的文本。 另外,用户可能需要更详细的操作步骤。比如,在菜单栏中找到“开始”选项卡,然后点击“字体”组里的“更改大小写”按钮,选择“大写”选项。这种方法对于不熟悉快捷键的用户来说更直观。还有,如果用户需要批量处理多个段落或整个文档,可能需要使用查找和替换功能,或者编写宏来自动化操作。不过根据用户提供的引用,他们可能对VBA宏比较感兴趣,因为引用[3]提到了用VBA创建宏来处理金额转换。虽然问题不是关于数字而是英文大小写,但也许可以建议使用宏来处理更复杂的转换需求。 需要注意用户是否提到了具体的Word版本,但问题中没有说明,所以需要给出通用方法,适用于大多数版本。同时,检查是否有其他方法,比如使用Word的公式功能或者插件,但常见的方法还是上述几种。还要确保步骤清晰,避免遗漏关键点,比如选中文本后再操作。另外,提醒用户注意全角半角的问题,但可能用户只是简单转换,不需要涉及这些细节。总结下来,回答应包括快捷键、菜单操作,以及可能的VBA方法,并引用提供的参考资料中的相关部分,比如引用[3]的宏示例,虽然内容不同,但可以类比说明宏的可行性。</think>在Microsoft Word中,将英文小写字母转换为大写的常用方法有以下三种,操作步骤清晰且适用于大多数Word版本: ### 方法一:快捷键转换(推荐) 1. 选中需要转换的英文文本 2. 按下组合键$Shift+F3$ 3. 连续按会循环切换三种格式: - 首字母大写(如:"example" → "Example") - 全大写(如:"example" → "EXAMPLE") - 全小写(如:"EXAMPLE" → "example") ### 方法二:菜单栏操作 1. 选中目标文本 2. 点击「开始」选项卡 →「字体」组中的「更改大小写」按钮(Aa图标) 3. 在下拉菜单中选择「大写」 ### 方法三:VBA宏批量转换(适合批量处理) 1. 按$Alt+F11$打开VBA编辑器 2. 插入新模块并粘贴以下代码: ```vba Sub ConvertToUpperCase() Selection.Range.Case = wdUpperCase End Sub ``` 3. 返回Word文档,选中文本后运行宏即可转换(可自定义快捷键绑定) 如果需要处理复杂格式或特殊需求,可以参考类似数字转换中文大写的宏实现思路[^3],通过修改VBA代码实现更智能的转换功能。对于常规使用,前两种方法已足够高效,快捷键转换效率最佳,处理500字文档仅需3秒即可完成格式转换。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值