我正在做一个课程项目。我们使用JavaScript作为前端。当调用异步获取时,响应只包含后端返回的部分数据。
例如,如果后端API返回:
{
"status": "success",
"content": [
{
name: "ABC",
key: "123456"
}
]
}
前端收到的响应:
{"status": "success"}
下面是我的代码:
前端:
export async function getObjectsFromS3(data) {
const response = await fetch(url, {
method: "GET",
headers: {
"Authorization": `Basic ${btoa("user:password")}`
}
});
if (!response.ok) {
throw new Error(response.status);
}
const result = await response.json();
return result
}
后端:
@RestController
@RequestMapping("/users")
public class S3Controller {
@Autowired
S3Service s3Service;
@GetMapping("/{userName}/objects")
public String listObjects(@PathVariable String userName, @RequestParam String prefix) {
AuthenticationUtil.authorizeUser(userName);
String jsonString = "";
JSONObject jo = new JSONObject();
JSONArray ja = new JSONArray();
ja.put("key");
ja.put("name");
ja.put("size");
ja.put("type");
try {
List<S3Object> objects = s3Service.listObjects(prefix);
for (S3Object object : objects) {
String suffix = object.key().replace(prefix, "");
String[] suffixDir = suffix.split("/");
if ((suffixDir.length == 1 && suffixDir[0] !== "")) {
String type, name, key;
key = object.key();
if (key.charAt(key.length() - 1) === '/')
type = "folder";
else
type = "file";
name = suffixDir[suffixDir.length - 1];
jsonString += object.key() + "," + name + "," + String.valueOf(object.size()) + "," + type + "\n";
}
}
jo.put("status", "success");
jo.put("content", CDL.toJSONArray(ja, jsonString));
} catch (Exception e) {
jo.put("status", "error");
jo.put("message", "Error when listing files: " + e.getMessage());
}
return jo.toString();
}
下面是DevTools的响应截图。DevTool's Response
我试过用postman调用这个API,一切正常,但是从frontend调用时,响应只包含部分数据。
1条答案
按热度按时间ljsrvy3e1#
有两件事值得一试:
1删除后端服务器中的所有逻辑,只返回一个简单的JSON对象。
2将您的数据放入一个
payload
中,如下所示: