Java Jersey Bean验证解释应用程序/x-www-form-url编码为Bean
我正在使用Jersey RESTful Web服务框架开发REST服务 需要使用url编码的表单内容类型,并将其解释/验证为beanJava Jersey Bean验证解释应用程序/x-www-form-url编码为Bean,java,rest,jersey,javabeans,Java,Rest,Jersey,Javabeans,我正在使用Jersey RESTful Web服务框架开发REST服务 需要使用url编码的表单内容类型,并将其解释/验证为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 ){ .
@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 ){ ... }
当资源使用application/json或application/xml时,这是可能的,但在application/x-www-form-urlencoded的情况下,我收到“415-不支持的媒体类型”响应 我的理解是,这不是开箱即用的支持,需要注册一个与此处类似的功能:
此错误与bean验证无关。第一件事是
application/x-www-form-urlencoded
对于像您的MyBean
这样的任意类型,都不是MessageBodyReader
。read只能处理和类型。因此,只有这两种类型可以作为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 ){ ... }
此错误与bean验证无关。第一件事是
application/x-www-form-urlencoded
对于像您的MyBean
这样的任意类型,都不是MessageBodyReader
。read只能处理和类型。因此,只有这两种类型可以作为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 ){ ... }
非常感谢。这是一个非常有用的功能。在相关注释中,这里有完整注释包的参考:谢谢!这是一个非常有用的功能。在相关注释中,这里有整个注释包的参考: