将许多参数传递给控制器的好方法是啥?
Posted
技术标签:
【中文标题】将许多参数传递给控制器的好方法是啥?【英文标题】:What is a good way to pass many parameters to controller?将许多参数传递给控制器的好方法是什么? 【发布时间】:2021-01-07 17:50:15 【问题描述】:我有一个基于 Java(Spring 框架)和 javascript(AngularJs 框架)的应用程序。表格中有对象列表和用于过滤此对象的两个文本字段。过滤发生在服务器端,因此我将这些值从文本字段传递给@RestController 的方法作为参数,然后传递给存储库方法。 客户端:
$http(
method: 'GET',
url: '/messages',
params: sender: $scope.sender, recipient: $scope.recipient
).then(
function (res)
$scope.messages = res.data;
,
function (res)
console.log("Error: " + res.status + " : " + res.data);
);
服务器端:
@GetMapping("/messages")
@ResponseBody
public List<Message> getMessagesWithFilters(@RequestParam(required = true) String sender,
@RequestParam(required = true) String recipient)
List<Message> messages = messageRepository.findBySenderNumberAndRecipientNumber(sender, recipient);
return messages;
如果只有两个过滤器,这很容易,但如果有 10 个或 20 个,我该怎么办?有没有一种好方法可以做到这一点,我应该将它们作为 Map 或类似的东西传递吗?
【问题讨论】:
试试这个:medium.com/@AADota/… 此外,您可以使用@RequestParam MultiValueMap<String, String> params
,这将为您提供Map
,其中键是参数名称,值是为该参数提供的所有值的List
。
This post and its answer 可能也很有趣。
@locus2k 谢谢,但我需要能够定义通过什么过滤器,用这个方法不是很方便
@BeUndead 我只是在想,谢谢
【参考方案1】:
你可以使用这个注解@ModelAttribute
喜欢:
@GetMapping("/messages")
@ResponseBody
public List<Message> getMessagesWithFilters(@ModelAttribute Filter filter)
List<Message> messages = messageRepository.findBySenderNumberAndRecipientNumber(filter.sender, filter.recipient);
return messages;
和 Filter.java
public class Filter
public String sender;
public String recipient;
然后您可以在控制器中使用 filter.sender
和 filter.recipient
【讨论】:
比使用 Map 更好吗?如果是,为什么? 一个 Map 可以包含任何以上是关于将许多参数传递给控制器的好方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章