泽西同时使用application / json和application / x-www-form-urlencoded

时间:2018-12-17 23:49:11

标签: java jersey dropwizard

我想要类似的东西

@POST
@Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_FORM_URLENCODED})
@Path("/")
void create(@Suspended final AsyncResponse asyncResponse,
            @ApiParam(required = true) @NotNull @Valid final CreateServiceRequest service);

所以我可以同时使用JSON和URL编码。但是,当我使用-d foo=bar发出POST请求时,出现415不支持的格式化错误。

是否可以使用相同的端点来消费两者?如果不可能,如何对正文进行自动验证以进行URL编码?我看到人们使用MultivaluedMap,但这只是一张地图。我想确保提供正确的字段。

1 个答案:

答案 0 :(得分:1)

我相信Jersey不可能做到这一点(至少我找不到相应的示例或文档)。 但是请记住,您可以将通用逻辑提取到一个方法中,并使用不同的@Consumes指令为相同的方法提供两个方法。

@POST
@Consumes({MediaType.APPLICATION_JSON})
@Path("/")
void createJson(@Suspended final AsyncResponse asyncResponse,
                        @ApiParam(required = true) @NotNull @Valid final CreateServiceRequest service) {
    create(service)
}


@POST
@Consumes({MediaType.APPLICATION_FORM_URLENCODED})
@Path("/")
void createJson(@Suspended final AsyncResponse asyncResponse,
                        @ApiParam(required = true) @NotNull @Valid final CreateServiceRequest service) {
    create(service)
}