【问题标题】:How to pass object containing list of other custom objects to call REST service using HttpPost如何使用 HttpPost 传递包含其他自定义对象列表的对象以调用 REST 服务
【发布时间】:2017-11-01 16:35:58
【问题描述】:

我正在尝试通过将对象作为包含其他自定义对象列表的参数传递来调用 REST 服务。我收到“错误 405:不支持请求方法 POST”错误。 客户端代码-

CloseableHttpClient httpClient = HttpClients.custom().setSSLSocketFactory(SSLConnectionSocketFactory.getSystemSocketFactory()).build();

        httpPost = new HttpPost("http://api100.abc.xyz.com:9080/abcd/api/sscws/v1/saveContributions");
        httpPost.addHeader(WebAppConstants.CONTENT_TYPE, WebAppConstants.APPLICATION_JSON);
        httpPost.addHeader(WebAppConstants.ACCEPT, WebAppConstants.APPLICATION_JSON);
        httpPost.addHeader(WebAppConstants.X_USERNAME, userContext.getUserID());
        httpPost.addHeader(WebAppConstants.X_ENTERPRISE_ID, "123456");
        httpPost.addHeader(WebAppConstants.X_UNIQUE_ID, "A548742ATG");  //to do

        ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter();
        String requestParamJson = ow.writeValueAsString(contribRequestParamDto);

        httpPost.setEntity(new StringEntity(contribRequestParamDto, WebAppConstants.UTF_8));

在上面的代码中,contribRequestParamDto 是 ContributionsRequestParamDto 类的一个对象,看起来像这样-

public class ContributionsRequestParamDto {

private String tokenID;
private String taxID;
private String affiliateID;
private long planID;
private String accountNumber;
private String bankAccountNumber;
private String transitId;
private BigDecimal eftAmt;
private Date ppeDate;
private String taxYear;
private Short planType;

private List<ParticipantsDeferralDto> participantsDeferrals;
private List<EmployersContributionDto> employersContributions;

}

REST 端点将如下所示-

 @Transactional
@RestController
@RequestMapping("/v1")
@Api(value="v1", description="")
public class SscRestController {
    @RequestMapping(value="/saveContributions", 
            method=RequestMethod.POST, produces={MediaType.APPLICATION_JSON_VALUE}, consumes={MediaType.APPLICATION_JSON_VALUE})
    @ApiOperation(value="Returns the saved contributions object")
    public String saveContributions(@RequestBody ContributionsRequestParam contributionsParam) throws Exception {
        return "success";
    }
}

Json 请求正文是-

{
      "tokenID" : "123456789",
      "taxID" : "123456",
      "affiliateID" : "123456789",
      "planID" : 123456,
      "ppeDate" : "2017-10-24",
      "taxYear" : "2017",
      "planType" : 1,
      "participantsDeferrals" : [ {
        "taxId" : "555555",
        "participantDeferralAmt" : 22.00
      } ],
      "employersContributions" : [ {
        "taxId" : "555555",
        "employerContributionAmt" : 22.00
      } ]
    }

这不起作用,因为我收到“错误 405:不支持请求方法 POST”错误。如果通过从“ContributionsRequestParamDto”对象中删除这些列表字段,从 JSON 请求正文中删除“participantsDeferrals”和“employersContributions”的列表字段,它将起作用。所以我确信自定义对象列表及其相应的 JSON 请求正文有问题。我在这里错过了什么吗?请帮忙。谢谢!

【问题讨论】:

    标签: java json rest http-post


    【解决方案1】:

    我更改了日期的类型。现在它是普通字符串而不是 SQL 日期。将其类型更改为对象中的字符串后,它工作正常

    【讨论】:

      猜你喜欢
      • 2013-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多