json - 我如何处理 REST 中的不同响应?
问题描述
我有 2 个实体。但是我的响应类型不适合实体。
@Entity
@Table(name="customer")
public class Customer {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
private String firstname;
private String lastname;
private boolean available;
@OneToMany(cascade= {CascadeType.DETACH,CascadeType.MERGE,CascadeType.PERSIST,CascadeType.REFRESH})
@JoinColumn(name="customer_id")
private List<Product> products;
public Customer() {
// TODO Auto-generated constructor stub
}
public Customer(String firstname, String lastname, boolean available) {
super();
this.firstname = firstname;
this.lastname = lastname;
this.available = available;
}
public String getFirstname() {
return firstname;
}
public void setFirstname(String firstname) {
this.firstname = firstname;
}
public String getLastname() {
return lastname;
}
public void setLastname(String lastname) {
this.lastname = lastname;
}
public boolean isAvailable() {
return available;
}
public void setAvailable(boolean available) {
this.available = available;
}
public List<Product> getProducts() {
return products;
}
public void addProduct(Product product) {
if(products==null)
products=new LinkedList<Product>();
products.add(product);
}
@Override
public String toString() {
return "Customer [id=" + id + ", firstname=" + firstname + ", lastname=" + lastname
+ ", available=" + available + "]";
}
}
[GET] localhost:8080/myapp/customers/{id} 这里我想获取客户的所有数据(id,firstname,lastname,available,products)
{
"id" : 1,
"name" : "John",
"lastname" : "Doe",
"available" : false
"products" : {...}
}
[GET] localhost:8080/myapp/customers 但在这里我想为客户获取一些数据(只是 id、firstname、lastname)
[{
"id" : 1,
"name" : "John",
"lastname" : "Doe",
},
{
"id" : 2,
"name" : "Alex",
"lastname" : "Adams",
}]
我应该为每个响应创建新类吗?或在控制器中编辑 json 数据?
解决方案
你应该隔离:
实体用于数据库操作
DTO 用于与其他服务进行通信
因此,在您的情况下,我建议您创建 DTO 来处理这种情况。请注意,有许多库可以更轻松地在 DTO 和实体之间进行转换,例如 ModelMapper。
推荐阅读
- python - 模拟掷 2 个骰子 24 次并在 Python 中计算得到 6 的概率
- python - 如何将所有数组存储在for循环输出中
- node.js - Reactjs 无法正确连接到 Nodejs
- javascript - 由于屏幕分辨率的差异,计算项目的正确位置
- firebase - 未找到 Flutter Firebase.signInWithGoogle 方法
- z3 - Z3 答案不满足约束
- c - 从线程中停止 main
- python - 如何修复“TypeError unsupported operand type(s) for /: 'int' and 'function'”?
- rx-swift - Completable 的 RxSwift 缓存操作符
- apache-spark - 在 Spark 2.4 上的 pyspark.sql.functions.max().over(window) 上使用 .where() 会引发 Java 异常