gpt4 book ai didi

java - 在 RequestBody 的 POST 上隐藏 ID,但在创建时返回 ID

转载 作者:行者123 更新时间:2023-11-29 08:39:26 24 4
gpt4 key购买 nike

比如我有一个 bean

public class Order
{
int orderID;
String name;
}

我有一个 POST 操作

@ApiOperation(value = "Insert a new order", response = Order.class)
@RequestMapping(value = "/addOrder", method = RequestMethod.POST)
@ResponseStatus(HttpStatus.CREATED)
@ResponseBody
public Order addOrder(@Valid @RequestBody Order order)
{
//Set random id here
order.id = 'xxxxx';
Order o = orderService.insertOrder(order);
return o;
}

在 Swagger 中我有以下内容:

swagger_img

所以我的问题是,如何在 POST 时隐藏 ID 但在 GET 时显示 ID?或者我应该添加一个说明,说明即使您选择添加一个 ID,它也不会做任何事情,只会返回我的随机 ID?就像在 Kubernetes (uid) 中一样

@ApiModelProperty 中的只读属性可以解决任何问题吗?

最佳答案

一种简单的方法是将您的 bean 分成两部分 - 一个用于创建新对象,另一个用于扩展现有对象的数据。

例如

public class IncompleteOrder {
String name;
}

public class ExistingOrder extends IncompleteOrder {
int id;
}

然后让您的 POST 方法获取一个 IncompleteOrder 对象并返回一个 ExistingOrder。我还将委派为基础服务分配随机订单 ID 的责任...

public ExistingOrder addOrder(@Valid @RequestBody IncompleteOrder order) {
ExistingOrder o = orderService.insertOrder(order);
return o;
}

同样的事情可以通过拥有两个没有继承关系的完全独立的类来实现,如果创建新订单所需的信息与现有订单上的信息之间存在重大差异,这可能是合适的。

另一种方法是询问 id 的实际用途 - 为什么您的客户得到的是整数 id?理想情况下,如果他们想要有关订单的任何信息,他们应该查询 API 以获取资源,为此他们需要订单的 URI 而不是整数 ID。因此,就订单进行通信的外部服务应该来回传递 URI 而不是 id。也许您可以鼓励您的客户通过您在 POST 请求的 Location header 中返回的 URI 与每个客户进行通信?然后,您可以取消在响应中公开 id,并拥有一个完全对称的请求/响应主体。

关于java - 在 RequestBody 的 POST 上隐藏 ID,但在创建时返回 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41398212/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com