在我的REST API上,我有一个以前不需要路径参数输入的POST。但是,我现在希望通过接受可选表单参数进行扩展。我用@FormParam尝试了这个,但事实证明(至少)其中一个客户端没有设置内容类型application / x-www-form-urlencoded,而Jersey失败了:
在请求实体的内容类型时使用@FormParam 不是application / x-www-form-urlencoded
我可以解决这个问题吗?我想允许新客户端在表单中发送并仍然接受旧客户端设置的任何内容类型。
糟糕的解决方案是使用查询参数。
编辑: 尝试使用单独的@Consumes
添加新资源@POST
@Path("/something")
@Consumes(MediaType.WILDCARD)
public Response thisDoesNotWork(){
和
@POST
@Path("/something")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public Response thisWorks(@FormParam("input") String input){
在我的测试中,当实际发送表单时,它可以工作。如果我没有发送设置内容类型,则会因上述错误而失败。所以它似乎选择了thisWorks(..)资源。
EDIT2: 我想出了一个解决方法
@POST
@Path("/something")
@Consumes(MediaType.WILDCARD)
public Response thisDoesNotWork(
MultivaluedMap<String, String> formParams
){
如果没有设置内容类型,则使用this作为唯一资源,formParam将为null,如果设置了form,则formParam将包含表单参数。它可能会弄乱文档,但至少它会起作用。