将此代码段视为rest服务的服务器端入口点:
@Path("/publish")
@POST
@Consumes(MediaType.URL_FORM_ENCODED)
@Produces(MediaType.APPLICATION_JSON)
public javax.ws.rs.core.Response addBook(@QueryParam("bookId") String bookId,@FormParam("publisher") String publisher,@FormParam("authors") Set<String> authors){
//implementation logic
}
我需要将此其余服务用作客户端,并且我无法为此服务编写伪装的客户端实现以正确发送一组作者。我知道Jax-Rs的实现很容易,但是我特别想使用伴随jax-rs注释的假装来实现。我最好能做到的是以下两种实现: 假设我已使用适当的URL和编码器正确配置了Feign客户端构建器。这是伪装的接口,我在这里称呼它。我正在将Json响应解码为JAVA Map
客户端实现1:直接将一组字符串传递给伪装方法
@Path("/publish")
@POST
@Consumes(MediaType.URL_FORM_ENCODED)
@Produces(MediaType.APPLICATION_JSON)
public Map addBook(@QueryParam("bookId") String bookId,@FormParam("authors") Set<String> authors);
结果:服务器端的Jackson Json Parse异常
客户端实施2:
@Path("/publish")
@POST
@Consumes(MediaType.URL_FORM_ENCODED)
@Produces(MediaType.APPLICATION_JSON)
public Map addBook(@QueryParam("bookId") String bookId,@FormParam("authors") String author1,@FormParam("authors") String author2);
结果:200确定,但是响应对象仅包含author2的author,即author1已被author 2取代。
因此,我需要从伪装客户端调用此服务器端调用(不对服务器端方法签名进行任何更改),以便能够传递一组作者,并且以类似的方式使用它。 是否可以对Feign使用Jax-rs注释而不是基于feign的注释来实现此结果?同样,如果多值映射可以解决问题,那也可以。