Servlet API中的请求方法常量在哪里?

51
我想写东西。
if (POST.equals(req.getMethod()))

不是使用

if ("POST".equals(req.getMethod()))

但是我在Servlet API中找不到常量的定义(只在HttpServletRequest中查找过,我想它们应该在那里)。

它们在哪里(我正在使用许多库,所以如果有其他人定义它们也可以)?


我在主Java类库中稍微查找了一下,也没有找到它们作为常量的存在,甚至在java.net.HttpURLConnection中也没有。 - Powerlord
1
重要的是要记住硬编码为什么不好。硬编码数值可能会影响可读性(“Bob为什么在这里使用3849?”),或者导致错误:当更改一个值需要在另一个位置也进行更改时(而你只更改了其中一个)。在情况2中,该值应放入变量/常量中,并仅更改一次。使用POST而不是“POST”也不会影响(1)或(2),因此使用“硬编码”的值是可以的。 - Jeffrey Martinez
6个回答

30

1
如果您正在使用Jax-rs,这将非常有用,但是您是正确的,这是一个不太常见的位置来存储常量 - 它们可能应该被移动到Servlet API中。 - Kevin Hooke
我们正在使用Java 8 + Dropwizard 2。HttpMethod类存在于jakarta.ws-api-2.1.6.jar中。 - user674669

13
据我所知,该特定属性没有常量可用。您可以查看常量完整列表,以查看可用的内容。
当然,如果定义自己的常量能使代码更易于编写,您也可以随时这样做。

1
那就不是在javax.servlet中了。奇怪他们错过了基本的东西,但有一个DIGEST_AUTH的常量... - Thilo
1
@Matt 这是你回答时的情况,但自从Java 6以来,这些常量已经存在了。请更新 :) - Arnaud Denoyelle
@ArnaudDenoyelle,我对这个主题不是很了解了,如果你有新的信息,编辑一下会很感激。 - Matt

12

这些常量在Servlet中被定义为私有。

public abstract class HttpServlet extends GenericServlet
    implements java.io.Serializable
{
    private static final String METHOD_DELETE = "DELETE";
    private static final String METHOD_HEAD = "HEAD";
    private static final String METHOD_GET = "GET";
    private static final String METHOD_OPTIONS = "OPTIONS";
    private static final String METHOD_POST = "POST";
    private static final String METHOD_PUT = "PUT";
    private static final String METHOD_TRACE = "TRACE";
...

直接使用方法名称是完全没有问题的。


7
是的,因为错别字几乎从不发生。 - yeoman

9
在Spring中(因此也在JDK之外),您可以使用以下方法:

org.springframework.web.bind.annotation.RequestMethod

这是一个枚举类型,提供了所有的HTTP方法。
因此,您可以使用 RequestMethod.POST.name()

1

1

看起来 .NET 有一些 Java 没有的字符串常量。 - Thilo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接