我正在使用WebAPI
v2.2,并且正在使WebAPI使用[FromBody]属性将JSON反序列化到对象上。反序列化的目标类在内部方法上具有[OnDeserialized]属性,如下所示:
[OnDeserialized]
internal void OnDeserialisedMethod(StreamingContext context) {
// my method code
}
我知道事实是此方法中的代码有问题,我已逐步解决并找到了它。对我来说,问题是我一点也不例外。发生的情况是此方法被跳出,异常似乎被忽略了。因为未正确执行此序列化方法,所以调用了我的控制器操作并且未正确填充目标对象。
我的问题是;如何捕获WebAPI反序列化期间发生的异常?
我编写了一个过滤器(如各种注释中所建议),该过滤器检查ModelState并在确实发生序列化错误时引发异常。但是请注意,它可能不只包含序列化异常-
可以通过在Select
语句中指定具体的异常类型来进行调整。
public class ValidModelsOnlyFilter : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
if (actionContext.ModelState.IsValid)
{
base.OnActionExecuting(actionContext);
}
else
{
var exceptions = new List<Exception>();
foreach (var state in actionContext.ModelState)
{
if (state.Value.Errors.Count != 0)
{
exceptions.AddRange(state.Value.Errors.Select(error => error.Exception));
}
}
if (exceptions.Count > 0)
throw new AggregateException(exceptions);
}
}
}
我建议将此过滤器绑定到全局范围。我真的无法理解为什么应该可以忽略反序列化异常。
问题内容: 我有一个对象,即时通讯读取和写入,并从和。我不断收到Java期望的错误,但发现了另一个。 在我的课堂上,我已经实现并拥有一个我认为足够的领域。 我是Java序列化的新手。我在这里想念什么? 编辑 如果有关系,我实际上是在尝试读写 这是完整的痕迹: 问题答案: 您正在读取文件吗?在这种情况下,是否立即添加serialVersionUID无关紧要,它不同于文件中存储的那个,并且会创建异常。
问题内容: 我有一个发送到服务器或从服务器发送的用户对象。发送用户对象时,我不想将哈希密码发送给客户端。因此,我添加了password属性,但是这也阻止了将其反序列化为密码,这使得在没有密码的情况下很难注册用户。 我怎样才能只应用序列化而不是反序列化?我使用的是Spring JSONView,因此对的控制不多。 我尝试过的事情: 添加到属性 仅添加getter方法 问题答案: 确切的操作方法取决于
我正在寻找注释来注释pojo类,我需要在请求反序列化期间对其进行验证。我正在搜索要作为参数类传递的注释,该类将验证我的pojo。 实现可以如下所示: 有人知道这种方法的Spring注释或提供声明性验证的依赖项吗?我问是因为我在留档中找不到任何类似的解决方案。
我正在从事一个SpringMVC项目,我需要完成的任务之一是让用户在POST请求中发送一个JSON数据字符串。我知道Spring将使用Jackson对对象反序列化JSON,但如果我尝试以下方法: 我只是返回HTTP 400错误请求(“客户端发送的请求在语法上不正确”)。 如何获取客户端作为字符串发送的原始JSON?
试图在Java中使用protobuf反序列化消息,并得到以下异常。 原因:com.google.protobuf.InvalidProtocolBufferException:在解析协议消息时,输入意外地在字段中间结束。这可能意味着输入被截断,或者嵌入的消息错误报告了自己的长度。在com.google.protobuf.InvalidProtocolBufferException.Truncate