[英]In Spring Boot 2 how can I accept LocalDates as RequestParams
[英]How do I handle an unknown number of RequestParams in Spring Boot REST?
我在 Spring Boot 中有一个 REST api:
@GetMapping("/test")
public MyClass getData() {
return something;
}
最多可以使用 10 个 RequestParams 请求此端点。 我当然知道所有 10 个可能的 RequestParams,但是客户端可以选择使用 0 到所有 10 个 RequestParams 之间的任何位置进行请求。
现在我需要一种方法来处理这个问题,而无需在 getData() 方法中将所有 10 个 RequestParams 作为参数插入。 是否不可能在一个类中注册所有可能的 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 等)因此以下解决方案非常接近但没有解决它,因为映射需要一致的值类型: how to capture multiple parameters using @RequestParam using spring mvc?
一种方法是接收带有参数的 Map,问题是所有参数都具有相同的类型,并且您必须在代码中强制转换为正确的类型:
@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
-Annotation 中定义一个默认值。
您可以使用@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;
}
客户端应该向 api /test 发送 json 数据
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.