我目前正在尝试使用Glassfish 4(使用Jersery 2.0和EclipseLink 2.5)解构通过REST PUT提供的JSON对象。
JSON对象由多个属性组成,包括映射到Java枚举的字符串值。
除了有效负载中提供了无效的枚举值外,其他一切都正常工作
JSON对象:
{
"rating":"INVALID",
...
}
被解组为:
public RatingInfo {
@ValidRating
private Rating rating;
...
public Rating getRating(){...}
public void setRating(Rating rating){...}
...
}
public enum Rating {
G,
PG
}
如果JSON负载中的值不是有效的Rating,它当前返回null,这似乎是JAXB忽略转换错误的结果(请参阅在执行JAXB解组时处理无效枚举值)
问题是我需要区分评级实际为null的情况(这是有效的用例)和JSON中评级值无效的情况,以便我可以在REST响应中返回400错误。
当使用JAX-RS和MOXy作为默认提供程序时,我不知道如何重写忽略转换错误的默认行为。
目前,我已通过将RatingInfo中的Rating Enum变量更改为字符串来解决此问题:
public RatingInfo {
@ValidRating
private String rating;
....
}
在ValidRating bean验证器中,我然后根据枚举验证字符串值,以确保传入的字符串是有效的评级,如果失败,框架将抛出一个ConstraintViolationException,我将其映射到400。
这并不理想,因为我更喜欢在RatingInfo bean中使用枚举,但它现在确实解决了问题。
最简单的方法是创建一个XmlAdapter
并自己处理从String
到enum
的转换。然后,当值不正确时,您可以相应地操作。
现在,当我发送包含以下json数据的POST请求时: 它工作得很好,MOXY会自动将这个json映射到用户对象,很好 但我需要使用另一层嵌套来处理json,如下所示:
我正在开发一个java脚本客户端应用程序,在服务器端我需要处理CORS,所有我用JAX-RS和Jersey编写的服务。我的代码: 感谢佛普尼
问题内容: 我正在开发一个Java脚本客户端应用程序,在服务器端我需要处理CORS,以及我用JERSEY用JAX-RS编写的所有服务。我的代码: 到目前为止,我收到错误消息请求的资源上没有标头。因此,不允许访问源’ http:// localhost:8080 ‘。” 请协助我。 问题答案: 注意:请务必阅读底部的UPDATE 是CXF批注,因此不适用于Jersey。 对于Jersey,要处理CO
问题内容: 我正在开发一个Java脚本客户端应用程序,在服务器端我需要处理CORS,以及我用JERSEY用JAX-RS编写的所有服务。我的代码: 到目前为止,我收到错误消息在请求的资源上没有标头。因此,不允许访问源’ http:// localhost:8080 ‘。” 问题答案: 注意:请务必阅读底部的UPDATE @CrossOriginResourceSharing 是CXF批注,因此不适用
我正在尝试创建一个简单的REST api,我遵循了Jersey网站上的教程:https://jersey.java.net/nonav/documentation/2.0/deployment.html 以下是错误: 原因:javax.servlet.unavailableException:org.eclipse.jetty.servlet.baseholder.doStart(basehold
webresources定义如下。这个类是由NetBeans自动添加的。