Akka:自定义httpheader,将hashmap转换为Itable< httpheader>在爪哇

发布于 01-18 11:42 字数 799 浏览 3 评论 0 原文

我正在尝试在Akka生成自定义Httpheader。我有一个标题条目的示意图,我需要转换为峰值。 这是我的代码:

import akka.http.javadsl.model.HttpHeader;
HashMap<String, String> headersMap = new HashMap<>();
headersMap.put("key1","value1");
return (Iterable<HttpHeader>) headersMap;
//HttpRequest.create().withUri("uri").addHeaders(Iterable<HttpHeader> iterable)
public static Iterable<HttpHeader> convertToRecordHttpHeaders(Map<String, String> headersMap){
    return headersMap.entrySet().stream()
            .map(x -> new HttpHeader(x.getKey(), x.getValue()))
            .collect(Collectors.toList());
}

将地图转换为httpheader并将其转换为迭代的有效方法是什么,因为我想在akka中创建httprequest。

解决方案: 使用Rawheader添加标头以要求

request.addHeader(RawHeader.create("key","value"));

I'm trying to generate custom HttpHeader in akka. I've a HashMap of header entries which I need to convert to Iterable.
Here's my code:

import akka.http.javadsl.model.HttpHeader;
HashMap<String, String> headersMap = new HashMap<>();
headersMap.put("key1","value1");
return (Iterable<HttpHeader>) headersMap;
//HttpRequest.create().withUri("uri").addHeaders(Iterable<HttpHeader> iterable)
public static Iterable<HttpHeader> convertToRecordHttpHeaders(Map<String, String> headersMap){
    return headersMap.entrySet().stream()
            .map(x -> new HttpHeader(x.getKey(), x.getValue()))
            .collect(Collectors.toList());
}

What's the efficient way to convert the map to HttpHeader and convert it to Iterable as I want to create a HttpRequest in akka.

Solution:
Used RawHeader to add headers to request

request.addHeader(RawHeader.create("key","value"));

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

吃兔兔 2025-01-25 11:42:25

HashMap 不是一个 Iterable 任何东西。它的 entrySet()keySet()values() 是,但对于您的地图来说,这些是 IterableIterable分别是 String、String>>IterableIterable。这意味着您无法以任何方式将映射转换为 Iterable

您可以做的是转换:

List<HttpHeader> headersList = headersMap.entrySet().stream()
        .map(entry -> new HttpHeader(entry.getKey(), entry.getValue())
        .collect(Collectors.toList()); // or just toList() with Java 17

这假设 HttpHeader 有一个采用标头名称和值的构造函数。如果没有,请将构造函数调用替换为创建 HttpHeader 的其他内容。

A HashMap is not an Iterable anything. Its entrySet(), keySet() and values() are, but for your map those are Iterable<Map.Entry<String, String>>, Iterable<String> and Iterable<String> respectively. That means that you cannot cast the map in any way to an Iterable<HttpHeader>.

What you can do is convert:

List<HttpHeader> headersList = headersMap.entrySet().stream()
        .map(entry -> new HttpHeader(entry.getKey(), entry.getValue())
        .collect(Collectors.toList()); // or just toList() with Java 17

This assumes that HttpHeader has a constructor that takes a header name and value. If it doesn't, replace the constructor call with something else that creates an HttpHeader.

梦亿 2025-01-25 11:42:25

假设您的 Header 类是这样的

class HttpHeader{
    public HttpHeader(Map.Entry<String,String> header){}
}

,然后只需使用构造函数引用代替 lambda,否则您可以使用 lambda 表达式

headersMap.entrySet().stream().map(HttpHeader::new).iterator 提供解析();

但我仍然不明白为返回 HttpHeader 迭代器创建 HashMap 的用例。

我猜你曾经保持标头键唯一的viva映射,但是你可以使用TreeSet来维护唯一的对象


class HttpHeader implements Comparable<HttpHeader>{
    String key;
    String value;
    
    public HttpHeader(String key, String value){
        this.key = key;
        this.value = value;
    }

    @Override
    public int compareTo(HttpHeader o) {
        return key.compareTo(o.key);
    }
}

Lets say your Header class is something like this

class HttpHeader{
    public HttpHeader(Map.Entry<String,String> header){}
}

then just use constructor reference in place of lambda or else you can provide your parsing using lambda expression

headersMap.entrySet().stream().map(HttpHeader::new).iterator();

But still i don't understand the use case of creating HashMap for return HttpHeader iterator.

i guess you used to keep header keys unique viva map however you can use TreeSet that will maintain unique objects too


class HttpHeader implements Comparable<HttpHeader>{
    String key;
    String value;
    
    public HttpHeader(String key, String value){
        this.key = key;
        this.value = value;
    }

    @Override
    public int compareTo(HttpHeader o) {
        return key.compareTo(o.key);
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文