在springboot&hibernate中,我制作了一个api来更改产品的订单状态,在orderstatus类中,我有两个枚举类型字段,fromstatus和tostatus
我的orderstatus类如下所示:
@Entity
public class OrderStatus {
@Id
private Long orderProductId;
@Enumerated(value = EnumType.STRING)
private Status fromStatus;
@Enumerated(value = EnumType.STRING)
private Status toStatus;
枚举:
public enum Status{
ORDER_PLACED, CANCELLED, ORDER_CONFIRMED, ORDER_REJECTED, REFUND_INITIATED, ORDER_SHIPPED, DELIVERED, CLOSED,
RETURN_REQUESTED, RETURN_REJECTED, RETURN_APPROVED, PICK_UP_INITIATED, PICK_UP_COMPLETED, REFUND_COMPLETED
}
我想限制的是,当fromstatus处于order\u placed状态时,tostatus只能是order\u confirmed、order\u rejected或cancelled。
可能值的Map图
目前我没有任何验证,所以当有人使用changeorderstatus api时,他们可以将这两个字段更改为他们想要的任何内容,
例如:from\ u status:order\ u placed和to\ u status:return\ u initiated,我不希望发生这种情况。
allowed tostatus值应取决于fromstatus中的值
我可以做一个这样的方法,在这里我用if条件检查每个可能的值,我想知道是否有更聪明的方法来解决这个问题。
谢谢您
2条答案
按热度按时间erhoui1w1#
一个简单的方法是包含一个
validate(Status status)
在你的枚举中比如:
更好的方法(但更复杂)是使用
StateMachine
像Spring式机器31moq8wy2#
如果你需要确定没有人能拯救
OrderStatus
如果枚举值错误,则必须在此基础上构建一些业务逻辑。我建议搬家
fromStatus
以及toStatus
并在此类中实现验证。