【问题标题】: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&lt;String, String&gt; params,这将为您提供Map,其中键是参数名称,值是为该参数提供的所有值的List
  • This post and its answer 可能也很有趣。
  • @locus2k 谢谢,但我需要能够定义通过什么过滤器,用这个方法不是很方便
  • @BeUndead 我只是在想,谢谢

标签: javascript java angularjs spring rest


【解决方案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.senderfilter.recipient

【讨论】:

  • 比使用 Map 更好吗?如果是,为什么?
  • 一个 Map 可以包含任何 而 ModelAttribute 强制类型并允许多种类型而无需显式转换
  • 您也可以通过简单的重构将同一个类用于不同的端点(因为它在一个类上,而不是在用作映射键的字符串中)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-04
  • 2020-05-19
  • 2018-01-20
  • 2014-07-21
  • 2010-11-10
  • 1970-01-01
  • 2015-01-25
相关资源
最近更新 更多