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