例如,当我在下面发出http请求时:
GET / myBox
期待json格式的数据响应:
{
a: (expecting a number),
b: (expecting a string),
c: (expecting 'apple', 'orange', or 'banana')
}
然后让我们假设我们的服务器程序永远不会出错。如果出现网络错误,我们是否需要验证响应的内容数据?如果我们应该,那么验证每个响应数据的最有效方法是什么。
答案 0 :(得分:3)
最好在成功和错误情况下创建来自服务器的可预测JSON有效负载。例如,如果我们遇到错误,可能是这样的有效负载:
{ error: true, errorMessage: 'Some error message', payload: null }
对于与网络相关的错误,您需要在客户端应用程序中处理相应的HTTP状态代码。更多相关内容:https://developer.mozilla.org/en-US/docs/Web/HTTP/Status
如果要为从服务器传递到客户端的数据开发脊状模式,您可能需要查看更适合Protobuf的格式。
请参阅:
答案 1 :(得分:1)
总的来说,我认为您可以合理地期望答案是正确的。大多数开发者会。如果您处理多个服务器和那些实现相同协议的服务器的多个实现者,那么您可能无法信任它。
在这种情况下验证响应的一种方法是使用类似json-schema
的内容。
但是,如果您不处理许多服务器,也许您可以问自己在哪些情况下响应可能是错误的。你有理由不相信吗?
答案 2 :(得分:0)
当您在响应对象中设置所需字段的数据类型时,可以验证响应数据。
例如: -
假设这是您期望作为响应对象的类: -
@Bean
public Jackson2ObjectMapperBuilderCustomizer customizeObjectMapper() {
return jacksonObjectMapperBuilder -> jacksonObjectMapperBuilder.featuresToEnable(JsonGenerator.Feature.WRITE_BIGDECIMAL_AS_PLAIN);
}
如果在上面的字段中你将field1作为long而不是String,那么你将得到一个错误,检查服务器是否给出了你预期的响应。