@Service("receiverService")@Path("/receiver")public class ObjectReceiverService { @POST @Path("jsonTest") @Produces("application/json") public MyObject jsonTest(@FormParam("myPrimitive") int myPrimitive, @FormParam("myComplex") MyObject myComplex) { return myComplex; } ...//}//domain class with Mapper from Jacksonpublic class MyObject { public String foo; public String bar; public String baz; public static MyObject valueOf(String s) throws Exception { return new ObjectMapper().readValue(s, MyObject.class); } ...//implementation of equals() etc.}//test class with lots of manual setup using WebClientpublic class ObjectReceiverServiceTest { @Before public void setup() { ProviderFactory.getSharedInstance().registerUserProvider(new JacksonJsonProvider()); } @org.junit.Test public void jsonTest1_recievingSameObject() throws Exception { String url = "http://localhost:8080/"; String path = "rest/receiver/jsonTest"; MyObject myObjectToSend = new MyObject(); MyObject result = new MyObject(); myObjectToSend.foo = "foo"; myObjectToSend.bar = "bar"; myObjectToSend.baz = "baz"; WebClient client = WebClient.create(url); client.path(path); client.accept("application/json").type(MediaType.APPLICATION_FORM_URLENCODED_TYPE); Response r = client.post("myPrimitive=123&myComplex=" + new ObjectMapper().writeValueAsString(myObjectToSend)); result = new ObjectMapper().readValue(new BufferedReader(new InputStreamReader((InputStream) r.getEntity())).readLine(), MyObject.class); assertEquals(myObjectToSend, result); } // better, but does not work @org.junit.Test public void jsonTest2() throws Exception { String url = "http://localhost:8080/rest"; ObjectReceiverService service = JAXRSClientFactory.create(url, ObjectReceiverService.class); MyObject myObjectToSend = new MyObject(); myObjectToSend.foo = "foo2"; myObjectToSend.bar = "bar2"; myObjectToSend.baz = "baz2"; MyObject result = service.jsonTest(123,myObjectToSend); assertEquals(myObjectToSend, result); }}