gpt4 book ai didi

具有所有请求参数的 Java REST API - 最佳实践

转载 作者:行者123 更新时间:2023-11-30 06:55:32 26 4
gpt4 key购买 nike

我定义了一个 REST GET API,它将获取所有请求参数并根据请求参数的值返回结果。如下所示:

@GetMapping(produces = MediaType.APPLICATION_JSON_VALUE)
public List<Student> findAll(@RequestParam Map<String, String> allRequestParams) {
if(allRequestParams.isEmpty()) {
return studentRepository.findAll();
} else {
return studentService.findWithFilter(allRequestParams); // This method will take care of using appropriate findBy method on the repository
}
}

上面的代码是使用Spring的方式来检索所有请求参数。我可以注入(inject) HttpServletRequest 并使用 getParametersMap() 方法来获取所有请求参数。我有几个问题:

  1. 使用Spring方式更好还是使用HttpServletRequest中的getParameterMap()更好?
  2. 我在一次代码审查中被告知这种编程是反模式的?有人可以解释一下为什么它被认为是反模式吗?如果它是反模式,那么处理这种处理的最佳方法是什么?

最佳答案

  1. Spring方式更好,因为它更方便。您想要使用 HttpServletRequest 的唯一原因是您只想将代码绑定(bind)到非供应商 API。既然您已经在使用 Spring,那么您不妨充分利用它的值(value)。

    您可能需要考虑使用自己的对象来保存请求参数。这使得其他开发人员可以更轻松地查看您的 API 支持哪些查询参数。即

    @GetMapping(produces = MediaType.APPLICATION_JSON_VALUE)
    public List<Student> findAll(@RequestParam MyQueryObject allRequestParams) {
    ...
    }

    Spring 会将查询参数映射到 MyQueryObject 的字段上,如果不可能的话,将向客户端返回合理的错误消息。 Spring 还将根据 Accept header 设置错误消息的格式,以便期望 application/json 的客户端能够得到该格式,而期望 text/的客户端也能得到该格式。 html 明白了。

  2. 它是反模式的唯一原因是它是弱类型的。您可能会说这是 Java 中的反模式,因为 Java 偏爱静态类型。

关于具有所有请求参数的 Java REST API - 最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41909869/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com