首页 / JSON / java – 验证Json请求架构
java – 验证Json请求架构
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 验证Json请求架构,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2424字,纯文字阅读大概需要4分钟。
内容图文
![java – 验证Json请求架构](/upload/InfoBanner/zyjiaocheng/797/cc932a8274414da9b1521bc1b4ac0623.jpg)
所以我有这个包含这个方法的Controller类:
@RequestMapping(value = "/x", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<MyRepsonseClass> get(
@ApiParam(value = "x", required = true) @Valid @RequestBody MyRequestClass request
) throws IOException {
//yada yada my logic here
return something;
}
Json请求自动映射到MyRequestClass.java
这就是那个类的样子:
@lombok.ToString
@lombok.Getter
@lombok.Setter
@JsonInclude(JsonInclude.Include.NON_EMPTY)
@ApiModel(description = "description")
public class MyRequestClass {
private List<SomeClass> attribute1;
private SomeOtherClass attribute2;
private YetAnotherClass attribute3;
}
这是有效json请求的示例:
{
"attribute1": [
{
"key":"value"
}
],
"attribute3": {
"key":"value"
}
}
现在,我的要求是当请求包含MyRequestClass.java中不存在的属性时返回错误消息.
因此:
{
"attribute1": [
{
"key":"value"
}
],
"attribute_that_doesnt_exist": {
"key":"value"
}
}
现在它不会抛出任何错误.相反,它根本不是将该属性映射到任何东西.我可以使用哪些注释可以使这种情况快速发生?谢谢.
解决方法:
创建自定义反序列化器:
public class MyRequestClassDeserializer extends JsonDeserializer<MyRequestClass> {
@Override
public MyRequestClass deserialize(JsonParser jsonParser, DeserializationContext context) throws IOException, JsonProcessingException {
MyRequestClass mrc = new MyRequestClass();
ObjectMapper mapper = new ObjectMapper();
JsonToken currentToken = null;
while((currentToken = jsonParser.nextValue()) != null) {
if(currentToken.equals(JsonToken.END_OBJECT)
|| currentToken.equals(JsonToken.END_ARRAY))
continue;
String currentName = jsonParser.getCurrentName();
switch(currentName) {
case "attribute1":
List<SomeClass> attr1 = Arrays.asList(mapper.readValue(jsonParser, SomeClass[].class));
mrc.setAttribute1(attr1);
break;
case "attribute2":
mrc.setAttribute2(mapper.readValue(jsonParser, SomeOtherClass.class));
break;
case "attribute3":
mrc.setAttribute3(mapper.readValue(jsonParser, YetAnotherClass.class));
break;
// <cases for all the other expected attributes>
default:// it's not an expected attribute
throw new JsonParseException(jsonParser, "bad request", jsonParser.getCurrentLocation());
}
}
return mrc;
}
}
并将此注释添加到MyRequestClass类:@JsonDeserialize(using = MyRequestClassDeserializer.class)
唯一的“问题”是手动反序列化jsons可能很麻烦.我会为你的案子编写完整的代码,但我现在还不够好.我可能会在将来更新答案.
编辑:完成,现在它正在运行代码.我觉得它更复杂.
内容总结
以上是互联网集市为您收集整理的java – 验证Json请求架构全部内容,希望文章能够帮你解决java – 验证Json请求架构所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。