我想遍历一个包含java servlet中所有头名的枚举。我的代码如下:
public class ServletParameterServlet extends HttpServlet
{
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
ServletConfig c = this.getServletConfig();
PrintWriter writer = response.getWriter();
writer.append("database: ").append(c.getInitParameter("database"))
.append(", server: ").append(c.getInitParameter("server"));
Enumeration<String> headerNames = ((HttpServletRequest) c).getHeaderNames();
}
}
这是正确的语法吗?如何实际迭代Java中的枚举值?特别是在这种情况下?
感谢您的帮助, 马克
答案 0 :(得分:5)
它只是像普通Java一样的迭代:
for (Enumeration<?> e = request.getHeaderNames(); e.hasMoreElements();) {
String nextHeaderName = (String) e.nextElement();
String headerValue = request.getHeader(nextHeaderName);
}
请注意,对于某些设置,这有点危险,因为可以复制HTTP标头。在这种情况下,headerValue
将只是具有该名称的第一个HTTP标头。使用getHeaders
获取所有这些内容。
扔掉Eclipse建议的东西 - 它是垃圾。
答案 1 :(得分:1)
您可以使用以下方法将其转换为List
:
public static <T> List<T> enumerationToList(final Enumeration<T> enumeration) {
if (enumeration == null) {
return new ArrayList<>();
}
return Collections.list(enumeration);
}
用法:
final List<String> headerNames = enumerationToList(request.getHeaderNames());
for (final String headerName : headerNames) {
System.out.println(headerName);
}
答案 2 :(得分:0)
我们可以使用forEachRemaining
Enumeration<String> headerNames = request.getHeaderNames();
headerNames.asIterator().forEachRemaining(header -> {
System.out.println("Header Name:" + header + " " + "Header Value:" + request.getHeader(header));
});