Spring MVC RestFul服务+ Jersey客户端400错误请求

时间:2016-01-27 21:46:26

标签: java spring rest jersey jersey-client

我在Spring中创建了一个RESTful Web服务,并试图通过Jersey客户端调用它。这是我的控制器方法

@RequestMapping(value = "/create",
                method = RequestMethod.POST,consumes={MediaType.APPLICATION_JSON_VALUE},
                produces={MediaType.APPLICATION_JSON_VALUE})
public ResponseEntity<User> createUser(@RequestBody User user ){
    User u = null;
    HttpStatus statusCode;
    try{
        userService.create(user);
        u = userService.getUserById(user.getId());
        statusCode = HttpStatus.CREATED;
    }catch(Exception e){
        logger.error("Could not create user ", e);
        u = null;
        statusCode = HttpStatus.CONFLICT;
    }

    return new ResponseEntity<User>(u, statusCode);
}

当我从Jersey客户端调用此Web服务时,出现 400 Bad Request 错误。这是调用此服务的客户端

HttpAuthenticationFeature feature = HttpAuthenticationFeature.basic("xxxx", "yyyy");

final Client client = ClientBuilder.newClient();
client.register(feature);

WebTarget webTarget = client.target("http://localhost:8080/MyWeb/api").path("user/create");

Form form = new Form();
form.param("id", "jersey");
form.param("firstName", "Jersey");
form.param("lastName", "Client");


/*User user = webTarget.request(MediaType.APPLICATION_JSON_TYPE).post(Entity.entity(form, MediaType.APPLICATION_FORM_URLENCODED_TYPE), User.class);*/
Invocation.Builder invocationBuilder =  webTarget.request(MediaType.APPLICATION_JSON_TYPE);
Response response = invocationBuilder.post(Entity.entity(form, MediaType.APPLICATION_JSON_TYPE));

System.out.println(response.getStatus());
System.out.println(response.getStatusInfo());

我尝试使用服务和客户端中的MediaType值,但没有任何效果。

我告诉你,我对此非常陌生,这就像我第一次使用RESTful网络服务一样。

请帮助我理解我正在做的错误..

1 个答案:

答案 0 :(得分:1)

我认为您告诉您在有效负载中发送JSON的服务,但是当您这样做时,您将发送表单参数:

form.param("id", "jersey");

以及以下几行,您正在模拟POST,就像创建带有提交按钮的HTML表单一样。

您可能必须在客户端声明一个类User,该类的实例是一个对象,并将属性填充为:

User user = new User();
user.setId("jersey");

然后在POST中发送此对象(我没有使用Invocation.Builder,但它确实有一个以对象作为参数的post方法),Jersey客户端应该处理发送JSON字符串的序列化有效载荷。