java - Spring Java Rest处理反序列化时的无效类型

标签 java json rest jackson

我正在开发用于注册用户的 java REST API。我正在尝试检查发送到 POST 的用户是否其所有字段都有效,以便可以将其保存到数据库,但如果其中一个字段的类型无效,我找不到处理错误的方法。

我的模型User.java

public class User{

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private long id;
@Column
private String description;
@Column
private String date_joined;
@Column
private double age;
//setters and getters
}

用户资源方法:

@POST
@Consumes("application/json")
@Produces("application/json")
public Response postUser(User User)
{  
    //validate User fields and save to db
    // if valid return following, else send Bad Request
    return Response.status(Response.Status.CREATED).entity(User).build();
}

我使用ajax通过以下方式发送数据:

{
"date_joined":"27/12/19",
"description":"Currently looking for job",
"age":30
}

此示例效果很好,但我想验证发送的数据是否为无效类型,例如:

{
"date_joined":"27/12/19",
"description":"Currently looking for job",
"age": "thirty"
}

这会产生以下错误

org.codehaus.jackson.map.JsonMappingException: Can not construct instance of double from String value 'thirty': not a valid Double value

有没有办法捕获此类错误?因此,稍后我可以向用户发送一条消息,告知他们发送了无效数据

最佳答案

解决方案是否可以捕获异常并在出现 JsonMappingException 时返回错误消息?

try {
   return Response.status(Response.Status.CREATED).entity(User).build();
} catch (JsonMappingException e) {
   // Return a 4xx statuscode to indicate a client error and some json containing e.getMessage()
}

请告诉我这是否有用!谢谢!

:)

关于java - Spring Java Rest处理反序列化时的无效类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59505292/

相关文章:

java - 在手机上获取当前位置,不起作用? [安卓]

javascript - 如何获取指向javascript对象属性的链接数

javascript - 为什么我的 Angular 资源会忽略特定于操作的 url?

java - 安卓SDK : findViewById(int) undefined for type

java - Java中的方法执行顺序排序

java - 使用javafx创建一个从数字开始倒数并在0播放音乐的程序

php - JSON 响应中未定义的属性

javascript - 如何让Joi具有非凡的值(value)?

mysql - AWS API REST 连接到外部 MySQL 数据库

java - Struts 2 + Maven + Struts 2 Rest 插件帮助