2015-02-06 141 views
2

我在设计REST API时提出了这个问题。用java中其他对象更新对象的最佳方法在休息中

要更新资源,客户端必须使用更新的字段提交整个资源。问题是并非所有的字段都是可编辑的。如果客户端发送的资源中包含他不应更新的更新字段,该怎么办?我应该抛出某种异常还是忽略它们并更新所有可编辑的字段? 我想出了以下解决方案

class User { 

    private String firstName; //non-editable 
    private String lastName; //non-editable 
    private String occupation; //editable 
    private String address; //editable 

    //getters and setters 

}

public void updateUser(User original, User update) { 
    original.setAddress(update.getAddress()); 
    original.setOccupation(update.getOccupation()); 
} 

我在这里看到的问题是,UpdateUser两个方法是紧密结合的用户类别。如果我添加或删除可编辑/不可编辑的字段,我将不得不改变方法。是否有某种解决这类问题的最佳实践或模式?

+0

将值设置为null将被视为对您的编辑?当他们从头开始创建json时,很多人可能会更喜欢这样做,而不是搞清楚其他字段当前是什么。 – 2015-02-06 18:25:02

+1

另外,我认为编程stackexchange可能比stackoverflow更赞赏这个问题。 – 2015-02-06 18:26:00

回答

2

用户的静态方法会正确封装此功能。这样,您可以将所有用户特定的代码放在一起。

class User { 

     private String firstName; //non-editable 
     private String lastName; //non-editable 
     private String occupation; //editable 
     private String address; //editable 

     static public void updateUser(User original, User update) { 
     original.setAddress(update.getAddress()); 
     original.setOccupation(update.getOccupation()); 
     } 
    } 

另外,如果你那么在乎的firstName /创建后名字不被改变,我会确保他们不包括制定者在所有。

1

作为API的用户,我希望知道何时编辑不可编辑的值,因为这可能意味着我在代码中存在错误或者误解了API的功能。无论是哪种情况,我都希望尽可能在流程中尽早找到答案,所以我希望通过响应中的错误代码来看到异常,而不是看起来对我成功,但不会实际上做我认为的事情。

这就是说,这取决于具体的用例。没有关于如何使用API​​的更多细节很难说。只更新可编辑字段并在API文档中明确说明可能更有意义。

由于coderkevin已经调出,在User类上使用静态方法将是放置实际进行更新的代码的适当位置。

+1

这是一个很好的观点,在实践中,如果有人修改了不应该有的值,我会添加异常或返回验证错误。 – coderkevin 2015-02-06 19:09:25

相关问题