如何在Spring Boot REST中处理未知数量的RequestParams



我在Spring Boot:中有一个REST api

@GetMapping("/test")
public MyClass getData() { 
return something;
}

此端点最多可使用10个RequestParams进行请求。当然,我知道所有10个可能的RequestParams,但是客户端可以选择使用0到所有10个RequestParams之间的任何一个进行请求。

现在我需要一种方法来处理这个问题,而不需要将所有10个RequestParam作为参数插入getData((方法中。是否不可能在一个类中注册所有可能的RequestParams,并将该类用作getData((的参数?

类似这样的东西:

public class ParamClass {
private @RequestParam("ParamOne") String ParamOne;
private @RequestParam("ParamTwo") Set<String> ParamTwo;
private @RequestParam("ParamThree") Integer ParamThree;
}

然后

@GetMapping("/test")
public MyClass getData(@RequestParam ParamClass params) { 
return something;
}

请注意:参数可以是不同的类型(String、int、Set等(,因此以下解决方案非常接近,但没有解决它,因为映射需要一致的值类型:如何使用spring-mvc使用@RequestParam捕获多个参数

实现这一点的一种方法是接收带有params的Map,问题是所有params都具有相同的类型,并且您必须在代码中转换为正确的类型:

@ResponseBody
public String updateFoos(@RequestParam Map<String,Object> allParams) {
return "Parameters are " + allParams.entrySet();
}

您可以在方法中定义所有参数,并将它们设置为">不需要"。

@GetMapping("/test")
public MyClass getData(@RequestParam(name="p1", required=false) String p1,
@RequestParam(name="p2", required=false) Integer p2,
...) { 
return something;
}

然后你可以选择在你的url中定义哪些参数。其他为空。或者在RequestParam-注释中定义一个默认值。

您可以使用@RequestBody注释。它将把HttpRequest主体映射到类对象。由于spring-boot的类路径中有jackson,它将自动将入站HttpRequest主体反序列化到Java对象上。

public class ParamClass {
String paramOne;
String paramTwo;
....
String paramTem;

// default constructor

// all getters
// all setters

}

@PostMapping("/test")
public MyClass getData(@RequestBody ParamClass params) { 
return something;
}

客户端应将json数据发送到api/测试

相关内容

  • 没有找到相关文章

最新更新