首页 > 其他分享 >字段映射

字段映射

时间:2024-07-14 14:33:15浏览次数:8  
标签:实体类 映射 RequestBody JSON User user

要将前端传来的userid字段映射到后端User实体类的id属性,可以采用不同的策略,主要涉及使用@RequestBody, @ModelAttribute@JsonProperty注解。下面我将详细说明每种方法的实现步骤。

使用@RequestBody@ModelAttribute

在控制器中,你可以使用@RequestBody注解来接收前端发送的JSON数据,并使用@ModelAttribute来帮助将JSON数据中的字段映射到实体类的属性。但是,如果字段名不一致,单纯使用@ModelAttribute可能无法自动处理这种情况,因此我们需要手动创建一个DTO(Data Transfer Object)来接收前端数据,然后在控制器中将DTO转换为实体类。

创建DTO

首先,创建一个DTO类,用于接收前端的JSON数据:

public class UserDTO {
private Integer userid;
// 其他字段...
}

控制器方法

在控制器中,使用@RequestBody接收JSON数据,并使用@ModelAttribute将DTO转换为实体类:

@RestController
@RequestMapping("/user")
public class UserController {

@Autowired
private UserService userService;

@PostMapping("/update")
public ResponseEntity<?> updateUser(@RequestBody UserDTO userDto) {
User user = new User();
user.setId(userDto.getUserid()); // 手动映射userid到id
// 其他字段的映射...

userService.updateUser(user);
return ResponseEntity.ok().build();
}
}

使用@JsonProperty

如果你不想在控制器中手动创建DTO并映射字段,可以在User实体类中使用@JsonProperty注解来指定JSON字段与实体属性之间的映射关系。这样,当使用@RequestBody接收前端数据时,Jackson库会自动将JSON字段映射到实体类的属性。

修改实体类

User实体类中添加@JsonProperty注解:

@Getter
@Setter
public class User {
@JsonProperty("userid") // 指定JSON字段名
private Integer id;
// 其他属性...
}

控制器方法

现在,你可以直接在控制器中使用@RequestBody注解接收前端的JSON数据,而不需要额外的转换:

@RestController
@RequestMapping("/user")
public class UserController {

@Autowired
private UserService userService;

@PostMapping("/update")
public ResponseEntity<?> updateUser(@RequestBody User user) {
userService.updateUser(user);
return ResponseEntity.ok().build();
}
}

使用@JsonProperty是一种更为简洁和自动化的映射方式,它避免了在控制器中进行额外的手动转换,同时也提高了代码的可读性和可维护性。这是处理JSON字段与实体类属性名不一致时的推荐做法。

标签:实体类,映射,RequestBody,JSON,User,user
From: https://www.cnblogs.com/moon-new-star/p/18301520

相关文章

  • 映射器代理工厂
    我们在使用Mybatis时,只需要写Mapper和Dao接口就行,使用的时候只需要调用Dao中的方法就能完成数据的增删改查。那么Dao中的方法是谁实现的呢?难道Mybatis自动帮我们写了一个Dao的实现类吗?非也!而是使用了映射器代理工厂来实现的。映射器代理工厂(MapperProxyFactory)在Mybati......
  • 20240712总结、视图函数映射报错
    网络ip、端口,服务器人脸识别:1.接口,刚开始以为是调用消费机的接口,后来知道是消费机调用我的接口。2.对Django和Flask框架不熟悉,只会基本结构,Flask多套几层蓝图就懵了。3.对服务器、ip这些不明白,搞不懂消费机是怎么和服务器连上的。好像还用了docker4.对端口不熟悉,我对端口的理......
  • MyBatis用嵌套ResultMap实现一对多映射
    背景我们知道,MyBatis可以很方便地把SQLselect出来的数据直接映射为对象的属性,把对象取出来。但是,有些对象的属性是集合类型,集合里保存的是数个其他类型的对象。如何用MyBatis把它取出来呢?例子以以下这个应用场景为例:一个教师对应多个课程。数据结构如下:publicclassCour......
  • 端口映射Rinetd与访问控制tcpwrapper
    端口映射工具Rinetd虽然Linux本身自带的iptables可以实现端口转发功能,但其配置相对复杂。将TCP连接从一个IP地址和端口重定向到另一个IP地址和端口。rinetd是一个单进程服务器,处理与文件中指定的地址/端口对的任意数量的连接/etc/rinetd.conf。由于rinetd使用非阻塞I/O作为......
  • Docker 因端口映射不一致出现的问题
    问题描述因为服务器原先已经安装了nginx(非容器安装),并且占用80端口;而我方习惯使用容器进行安装应用,故用安装了一个容器ngixn;docker-compose.ymlversion:'3'services:nginx:restart:alwayscontainer_name:nginximage:nginxports:-81:80......
  • 字典映射处理
       正常情况下不同的终端在进行接口对接时会对传输的数据进行加密,在解密之后拿到字符串,要么直接用动态类型获取,但是又要对字段进行判空校验,非常麻烦,这里封装了实体映射的方法,直接把解密后的字符串进行解析,映射到对应的实体对象中,其中是包括单实体,以及包含带子表的实体映射。......
  • 【Spring Boot】关系映射开发(三):多对多映射
    关系映射开发(三):多对多映射1.创建实体1.1创建Student实体1.2创建Teacher实体2.创建测试在多对多关联关系中,只能通过中间表的方式进行映射,不能通过增加外键来实现。注解@ManyToMany用于关系的发出端和接收端。关系的发出端定义一个集合类型的接......
  • 映射
    Map1Map的基本使用Map(映射)是由Key(键)和Value(值)组成的。每一个键都是不重复的。一个键对应的一个值。键和值在一起称之为键值对。一个映射是由多个键值对组成的,将每一个键值对看作一个对象,抽取出一个代表键值对的类-->Map.Entry常用方法publicclassTestDemo{......
  • [图解]企业应用架构模式2024新译本讲解19-数据映射器1
    100:00:01,720-->00:00:03,950下一个我们要讲的就是200:00:04,660-->00:00:07,420数据映射器这个模式300:00:09,760-->00:00:13,420这个也是在数据源模式里面400:00:13,430-->00:00:14,820用得最广泛的500:00:16,250-->00:00:19,170大多数都是用600:......
  • 内存映射
    mmap内存映射函数(显示图片的新方法)----也是Linux系统IO中的函数之一基本概念系统IO函数的共同点:就是他们的形参中一定有一个是文件描述符(除open)。内存映射的意思:拆内存:普通运存,显存(集显和独显),是一块内存空间,存放显示画面的像素点。映射:两个集合中的元素,都具有......