繁体   English   中英

如何在 Spring Boot REST 中处理未知数量的 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM