Java 将映射作为请求参数发送到Spring Boot应用程序中的GET请求
基本上,我需要在GET请求中接受映射和其他请求参数 控制器:Java 将映射作为请求参数发送到Spring Boot应用程序中的GET请求,java,rest,spring-boot,model-view-controller,Java,Rest,Spring Boot,Model View Controller,基本上,我需要在GET请求中接受映射和其他请求参数 控制器: @GetMapping public Page<Users> search(@Valid final UsersParams params) { return userService.search(params); } 甚至可以在请求中传递映射,并使其在GET-REST调用中工作吗 不管我有多少知识,我唯一能想到的另一个选择是,使用带有逗号分隔值的列表来代替映射,并进行一些反序列化 您可以尝试的最好方法是将此请求
@GetMapping
public Page<Users> search(@Valid final UsersParams params) {
return userService.search(params);
}
甚至可以在请求中传递映射,并使其在GET-REST调用中工作吗
不管我有多少知识,我唯一能想到的另一个选择是,使用带有逗号分隔值的列表来代替映射,并进行一些反序列化 您可以尝试的最好方法是将此请求设置为post请求。 然后你可以用 请求对象
{
"age" : 20,
"gender" : "Male",
"names" : {
"john" : "doe"
}
}
DTO
如果你想得到比你能用的更多的东西
/test?age=20&gender=Male&john=doe&Harry=Potter
@GetMapping(“/test”)
公共无效搜索(UserParams-params,@RequestParam-Map-names){
log.info(“这是我们得到的对象”,params);
}
在UserParams和names映射中的所有对中,您将获得年龄和性别,您需要忽略names requestparam中的前两个条目,因为年龄和性别也将包含在其中
您只能保留Map而不是Userparam对象
可能与@Aakash重复,我的线程和他的线程之间的唯一区别是他需要绑定到映射的“所有参数”,而我需要映射到映射的字段,而其他字段仍然可以工作。您的
名称查询参数与名称属性的形状不匹配;参数看起来像是无效的JSON,它是一系列单个字符串,既不是多值的
,也不是映射
@AMagic在接受的答案中提供了一个Spring MVC指南链接,它告诉我们所有参数都将添加到映射中。为了回答您的问题,这是可行的,但在回答中有一个很好的警告。@chrylis onstrike-我有一个非常粗略的例子,您想建议在URL中传递地图的正确方法吗?
{
"age" : 20,
"gender" : "Male",
"names" : {
"john" : "doe"
}
}
@AllArgsConstructor
@NoArgsConstructor
@Data
class UserParams {
String age;
String gender;
Map<String, String> names;
}
@PostMapping("/test2")
public void search2(@RequestBody UserParams params) {
log.info("This is the object we got", params);
}
/test?age=20&gender=Male&john=doe&Harry=Potter
@GetMapping("/test")
public void search(UserParams params, @RequestParam Map<String, String> names) {
log.info("This is the object we got", params);
}