我想在我的Java应用程序中使用REST API.对于我的电话,我使用Retrofit2.通常,我必须发布对象,而该对象只需要一次,所以我问自己是否真的应该添加其他类.
(例如UserCreate)仅用于创建新资源(因为通常我收到的对象与创建相同类型资源所需的对象完全不同)
在这种情况下,可以使用com.google.gson.JsonObject.这使我能够创建不需要其他类的Json对象.
例如:
JsonObject obj = new JsonObject();
obj.addProperty("foo","bar");
Call<Something> call = caller.createSomething(obj);
>在这里使用JsonObject被认为是“良好实践”吗?是否有比创建多个类更好的选择?
>我完全错了吗?创建单独的课程是做我想做的最好的方法吗?
>使用JsonObject时是否会降低性能?
无论如何,对此没有普遍的回应.在API设计方面,无论是客户端还是服务器端,开发人员都有不同的喜好和偏好.
但是,具有描述请求正文或响应正文格式的Java类非常有用.如果这些类遵守命名约定(例如,附加* Request或* Response),并且它们收集在特定的有意义的程序包中,则随着时间的推移,它们将使您的同事的生活更加轻松.
使用Java类意味着使您的API接口更加健壮,因为编译器将帮助您在编码时发现问题.另一方面,通过使用无类型的JsonObject(或您将使用的Json库提供的任何对象),您需要更加小心.
使用Java类,您还可以利用多态和构造模式.您可以按接口而不是具体对象进行编码.
某些将API暴露给外界的服务也可能会为您提供包含预编译类的Jar文件,这些文件将包含在类路径中.
回答您的第三点,使用Gson手动构造一个JsonObject并比通过RequestBody提交它不会造成性能损失.请记住,将Java DTO用作@Body时,有一个序列化过程,由Gson负责.从性能的角度来看,手动构造JsonObjects也可能更好.