【发布时间】:2021-12-30 22:19:48
【问题描述】:
我想将一个 String 用户名数组从 react 传递给 Spring,以便我可以获取每个用户名的一些用户详细信息,最后将其传递回以作为 List<String> 作出反应
到目前为止,我正在制作一个用户名数组,然后将它们作为请求正文传递给 spring
const roundRobin = () => {
const userList = []
//Get list of entrants usernames to pass to backend
for(let i = 0; i < entrants.length; i++){
userList.push(entrants[i].username);
console.log(userList);
}
const List = JSON.stringify(userList)
//API call
apiCalls
.getRandomUserList(List)
.then((response) => {
console.log(response.data);
})
.catch((apiError) => {
if (apiError.response.data && apiError.response.data.validationErrors) {
setEditErrors(apiError.response.data.validationErrors);
}
console.log(apiError.response.data)
setPendingApiCall(false);
});
}
在春季,我的控制器将请求正文作为String[]
//create a random list of members who have entered an event
@CrossOrigin
@GetMapping("/users/createRandomList")
List<String> randomList(@RequestBody String[] usernames) {
return userService.createRandomUserList(usernames);
}
UserService 然后获取String[] 并将其更改为一个 List 并调用一个随机重新排列字符串顺序的方法,然后循环遍历返回的 List(这是一个用户名)并从中获取 User数据库并将有关该用户的一些详细信息添加到新列表中,然后返回以做出反应。
public List<String> createRandomUserList(String[] randomUsernames) {
List<String> users = new ArrayList<>();
List<String> randomUsersList = Arrays.asList(randomUsernames);
List<String> randomUsers = getRandomUsers(randomUsersList);
for (String randUsernames : randomUsers) {
User u = userRepository.findByUsername(randUsernames);
users.add(u.getFirstname() + " " + u.getSurname() + " " + u.getHandicap());
}
return users;
}
//Create list of entrants IDs in random order for tee times.
public List<String> getRandomUsers(List<String> userIds) {
int size = userIds.size();
List<String> passedList = userIds;
List<String> entrants = new ArrayList<>();
Random rand = new Random();
for(int i = 0; i < size; i++) {
int randomIndex = rand.nextInt(passedList.size());
entrants.add(passedList.get(randomIndex));
passedList.remove(randomIndex);
}
return entrants;
}
当我尝试在我的网络应用程序中运行它时,我收到了 HTTP 400 错误,
{timestamp: 1640902047907, status: 400, message: 'Required request body is missing: java.util.List<j…ser.UserController.randomList(java.lang.String[])', url: '/api/1.0/users/createRandomList'}
我不确定我做错了什么,据我所知,我正在将一个数组传递给 Spring,当我 console.log(List) 时,我得到["user1","user2"]
【问题讨论】:
-
听起来
List没有正确放入请求正文中。您的getRandomUserList代码看起来如何? -
嗨,这是我最初的问题。我想我可能已经找到了一个解决方案,通过一些阅读,建议我们不要将 RequestBody 与 Get 请求一起使用,所以我已将其更改为 RequestParam,如果我将列表作为参数发送,它现在工作正常在 api 调用中
-
哦,甚至没有意识到您的端点是 GET。是的 GET 请求不能有正文。
-
端点名称
/users/createRandomList不遵循 REST 规则,请参阅“使用名词命名 URI”。例如,您应该将其命名为/users?random。 -
@HanchenJiang 所有的请求都可以有一个body甚至get请求,但是根据REST主体发送一个带有get请求的body是一种不好的做法。一个好的做法是发送带有 POST 请求的正文
标签: java arrays reactjs spring-boot