gpt4 book ai didi

java - 如何使用 Spring RestTemplate 在 POST 中传递数组?

转载 作者:搜寻专家 更新时间:2023-11-01 03:39:03 25 4
gpt4 key购买 nike

我很难使用 Spring 的 RestTemplate 在 POST 中传递数组。以下是我正在使用的代码:

我在这里调用 RestTemplate:

private static void sendEntries() {
RestTemplate restTemplate = new RestTemplate();
String uri = "http://localhost:8080/api/log/list.json";

// Both LogEntry and ExceptionEntry extend Entry
LogEntry entry1 = new LogEntry();
ExceptionException entry2 = new ExceptionEntry();

Entry[] entries = {entry1, entry2};

entries = restTemplate.postForObject(uri, entries, Entry[].class);

System.out.println(new Gson().toJson(entries));
}

Controller 包含:

@RequestMapping(value = "api/log/list", method = RequestMethod.POST)
public @ResponseBody Entry[] saveList(@RequestBody Entry[] entries) {
for (Entry entry : entries) {
entry = save(entry);
}

return entries;
}

这导致:

org.springframework.web.client.HttpClientErrorException: 400 Bad Request

看起来数组没有被添加到请求中。当我不尝试传递数组时,所有其他 POST 请求都有效。我只是不确定我需要做什么才能让阵列正确传递。

这是正确的做法吗?是否可以传递一个 Collection?

最佳答案

你可以查看这个帖子:How to pass List or String array to getForObject with Spring RestTemplate ,该帖子的解决方案是:

列表或其他类型的对象可以使用 RestTemplate 的 postForObject 方法发布。我的解决方案如下:

Controller :

@RequestMapping(value="/getLocationInformations", method=RequestMethod.POST)
@ResponseBody
public LocationInfoObject getLocationInformations(@RequestBody RequestObject requestObject)
{
// code block
}

创建用于发布到服务的请求对象:

public class RequestObject implements Serializable
{
public List<Point> pointList = null;
}

public class Point
{
public Float latitude = null;
public Float longitude = null;
}

创建响应对象以从服务获取值:

public class ResponseObject implements Serializable
{
public Boolean success = false;
public Integer statusCode = null;
public String status = null;
public LocationInfoObject locationInfo = null;
}

使用请求对象发布点列表并从服务获取响应对象:

String apiUrl = "http://api.website.com/service/getLocationInformations";
RequestObject requestObject = new RequestObject();
// create pointList and add to requestObject
requestObject.setPointList(pointList);

RestTemplate restTemplate = new RestTemplate();
ResponseObject response = restTemplate.postForObject(apiUrl, requestObject, ResponseObject.class);

// response.getSuccess(), response.getStatusCode(), response.getStatus(), response.getLocationInfo() can be used

关于java - 如何使用 Spring RestTemplate 在 POST 中传递数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19940002/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com