当前位置: 首页 > 知识库问答 >
问题:

Jersey Bean验证解释应用程序/x-www-form-urlencoded作为Bean

郑星辰
2023-03-14

我正在使用Jersey RESTful Web服务框架开发一个REST服务。

需要使用url编码的表单content-type,并将其解释/验证为bean。

@POST @Path("put")
@Consumes("application/x-www-form-urlencoded")
@NotNull (message="Couldn't put this bean in the can, sorry")
public Response putABean( @Valid final MrBean bean ){ ... }
@XmlRootElement
public class MrBean {

@DecimalMin(value = "18" , message= "value must be at least 18")
@DecimalMax(value = "99" , message= "value must at most be 99")
@NotNull(message = "{null.generic}")
private Long age;

@NotNull(message = "{null.name.first}")
private String firstName;

@NotNull(message = "{null.name.last}")
private String lastName;

@Pattern(regexp="[0-9]{3,9}", message="{invalid.phone}")
@NotNull(message = "{null.generic}")
private String phone;

...

}

当资源使用application/json或application/xml时,这是可能的,但是在application/x-www-form-urlencoded的情况下,我会收到'415-Unsupported Media type'响应。

我的理解是,这不是现成的支持,需要注册一个类似于这里的特性:https://jersey.java.net/documentation/latest/media.html

共有1个答案

裴宜春
2023-03-14

此错误与bean验证无关。首先,application/x-www-form-urlencoded不会为任意类型(如您的MyBean)提供MessageBodyReader。读取可以处理的唯一类型是formmultivaluedmap。这是作为body参数的仅有的两种类型。

但还有另一个选择。@beanparam注释允许您创建bean,以组合任意@xxxparam注释元素,如@formparam@pathparam@queryparam@headerparam等。

public class MrBean {

    // validation annotations
    @FormParam("key1")
    private String value1;

    // validation annotations
    @FormParam("key2")
    private String value2;

    // getters setters
}

然后你可以做

public Response putABean( @Valid @BeanParam MrBean bean ){ ... }
 类似资料:
  • RESTAPI在映射到Java对象时采用输入内容类型:application/x-www-form-urlencoded,如 在表单输入请求中,我正在设置my_name和my_phone的值,但MyRequest对象的myName和myPhone为null。 我正在使用Jackson annotations 2.3 jar 有什么建议吗?可能有什么问题?

  • 我正在尝试使用,但数据没有到达PHP。我认为这是因为当使用标题始终设置为

  • 问题内容: 我想上网本REST API,它接受三个参数: ,, 我做它像这样在AngularJS为: 但是我总是这样: 对象{数据:“ {”结果“:”假“}”“,状态:200,配置:对象,状态文本:”确定“,标头:功能} 要么 {“ data”:“ {\” result \“:\” false \“}”,“状态”:200,“ config”:{“方法”:“ POST”,“ transformReq

  • 问题内容: 我是Web API的新手。我想使用web-api接收HTTP POST数据。content-type为,请求主体为: (JSON格式)。 我的控制器是这样的: 但是formData始终为null。仅当我将请求正文更改为: 我可以找到已保存在我的字符串中。 所以我的问题是我应该如何接收具有以下格式的数据: ? 是否有一种简单的方法可以将JSON淡化为C#? 感谢帮助! 更新:我尝试使用模

  • 我试图弄清楚为什么当Spring处理程序方法包含注释时,我不能从jquery.ajax调用接收请求。考虑以下几点: HTML/JavaScript: Java: 如果出现注释,上述操作将失败,并返回一个415错误(不会生成异常)。但是,如果删除注释(即参数签名只是),那么将调用该方法并将JSON返回给JavaScript。 为什么会这样呢?请求包括请求正文中的数据。注释不应该处理这样的请求吗? 我

  • 我已经使用Springboot和ApacheCXF库实现了webservice。 如果header设置为content type:application/x-www-form-urlencoded,则会抛出“读取XMLStreamReader时出错”。 它的工作原理如果内容类型:应用程序/xml。 我在我们的遗留应用程序old Spring上公开了相同的Web服务,该应用程序托管在tomcat w