目前用了三种
PO:和数据库字段一一对应,直接存入数据库.
IO:继承自PO,用于接收前端传来的数据.
VO:继承自PO,返回给前端要显示的数据.
但是感觉写起来很麻烦.
有没有一种方式,我只写一个PO,然后通过给字段加注解的方式.
比如
@Data
class User{
@PO
@VO
@IO
private String name;
@PO
@IO
private String id;
}
就类似这种,然后不论哪里用,都只传User就可以了.
id可以存到数据库,也会从前端接收.
但是不会出现在返回给前端的字段中.
就大概意思是这样.有类似框架么?
是个新手.知道的东西不多,来请教各位,还请不吝赐教.
我的建议是千万不要把不同用途的数据强行揉合在一起,虽然看起来代码少了一点,但是实际使用的时候非常麻烦(相同名字的字段在不同的各种对象中可能含义不同、类型不同),代码难以维护和修改。一般PO都是写工具自动生成出来的,数据表订好之后基本就不会改动。而IO、VO则需要根据前端需求经常变动
跟着阿里巴巴程序开发设计文档走呗
https://www.cnblogs.com/han-1034683568/p/7680354.html
1、可以考虑使用@JsonView这个注解 ,
但是这个注解需要你在实体里定义视图(如果你有多个返回不同值的接口,就得定义多个视图),具体的用法你可以百度一下
2、
可以直接封装一个转换工具类,核心思路就是:拿到实体以后,将实体转成JSONObject,然后在移除掉你不想返回的字段就行
下面这个封装逻辑你后续可以结合注解+AOP来弄,然后就直接在controller上定义返回的字段就行了,没必要到实体类里定义
import com.alibaba.fastjson.JSONObject;
import lombok.Data;
import java.util.Arrays;
import java.util.Date;
@Data
public class People {
private int id;
private String name;
private int age;
private int sex;
private Date date;
/**
*
* @param entity 要转换的实体
* @param ignoreColumnName 忽略实体中的字段名,多个字段名使用 , 逗号分隔
*/
public static <T> String test(T entity,String ignoreColumnName) {
//实体对象 转成 JSON格式
JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(entity));
String[] split = ignoreColumnName.split(",");
//移除 要忽略的字段名
Arrays.asList(split).forEach(d -> {
jsonObject.remove(d);
});
return jsonObject.toJSONString();
}
public static void main(String[] args) {
People people = new People();
people.setId(1);
people.setAge(18);
people.setDate(new Date());
people.setName("测试");
people.setSex(1);
System.out.println("转换前:"+JSONObject.toJSONString(people));
String ignoreColumnName = "date,age,sex";
String test = test(people, ignoreColumnName);
System.out.println("转换后:"+test);
}
}