【问题标题】:Unable to send Pojo via RestTemplate PUT request无法通过 RestTemplate PUT 请求发送 Pojo
【发布时间】:2018-12-28 06:10:30
【问题描述】:

无法通过 RestTemplate PUT 请求发送 Pojo。

我有一个需要从其他应用程序调用的休息服务。 服务是:

@RequestMapping(value = RESET_USER_PASSWORD_URL, method = RequestMethod.PUT, produces = APP_JSON)
public SuccessResponse resetUserPassword(@RequestBody ResetPasswordDTO resetPasswordDTO) throws GenericException {
    logger.info("--->reset Password");
    return new SuccessResponse(userservice.resetUserPassword(resetPasswordDTO));

}

我正在使用 RestTemplate 调用上述服务,为此我需要发送一个 POJO 以及 PUT 请求。使用 RestTemplate 的代码是:

public ResponseEntity<SuccessResponse> resetUserPassword(ResetPasswordDTO resetPasswordDTO)
        throws ServiceGenericException {
    ResponseEntity<SuccessResponse> ssoUserResponse = null;
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_JSON);
    HttpEntity<ResetPasswordDTO> requestEntity = new HttpEntity<ResetPasswordDTO>(resetPasswordDTO,headers);

    ssoUserResponse = restTemplate.exchange("http://localhost:5858/api/unsecured/resetpassword", HttpMethod.PUT, requestEntity,
            SuccessResponse.class);
    return ssoUserResponse;
}

我无法拨打电话。我得到以下异常: org.springframework.web.client.HttpClientErrorException: 400 null。

我要发送的 POJO:

public class ResetPasswordDTO implements Serializable {

private static final long serialVersionUID = -2372400429023166735L;
private String password;
private String activationCode;
}

【问题讨论】:

  • 请发布完整的异常堆栈跟踪
  • 似乎问题出在rest模板中调用的本地URL的响应中。请在 GitHub 上发布完整代码或上传代码并分享其链接。
  • 还向我们展示您传递给服务的 ResetPasswordDTO 对象和 JSON
  • 请阅读 POJO 是什么:geeksforgeeks.org/pojo-vs-java-beans
  • 同一个问题被问了两次..stackoverflow.com/questions/53955401/…

标签: java spring-boot


【解决方案1】:

Spring 无法将您的 json 解析为 POJO,因为变量声明为私有并且您没有任何 getter/setter。您需要将它们公开或将 getter/setter 添加到您的 ResetPasswordDTO 类。

另外,我强烈建议你看看 Lombok,它让这样的事情变得非常容易。

【讨论】:

  • 很多项目都在使用lombok。但是,使用Lombok 会使代码难以调试。
  • 我同意,但是你可以在你的团队中做一些限制,在我们的例子中,我们只在实体/模型类中使用 lombok。由于它们几乎由 objectmappers 处理,因此通常我们不需要调试它们。
【解决方案2】:

收到 4xx 错误时抛出 HttpClientErrorException。因此,如果您发送的请求是错误的,无论是设置标头还是发送错误的数据,您都可能会收到此异常。您应该在调用 API 时检查您的请求并验证从您这边发送的 POJO 的详细信息。

如果您仍然无法查明问题,请分享您的 POJO、请求详细信息和完整的堆栈跟踪。

有关 HTTP 400 错误代码的更多详细信息,您可以参考400 BAD request HTTP error code meaning?

【讨论】:

  • public class ResetPasswordDTO implements Serializable { /** * */ private static final long serialVersionUID = -2372400429023166735L;私人字符串密码;私有字符串激活码; }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-06
  • 1970-01-01
  • 1970-01-01
  • 2014-10-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多