繁体   English   中英

在 Azure Function Java 如何使用 HttpResponse 设置 Z55E7DD3016CE4AC57B9A0F56AF19Z

[英]In Azure Function Java how do I set cookies using HttpResponseMessage

In Azure Function Java how do I set cookies using HttpResponseMessage as I don't see any methods to support that in 2.0 version.

正如官方文档中所建议的那样,如果可能,函数应该是无状态的和幂等的。

将任何所需的 state 信息与您的数据相关联。 例如,正在处理的订单可能具有关联的 state 成员。 function 可以根据 state 处理订单,而 function 本身保持无状态。

通过检查HttpRequestMessageHttpRequestMessage.Builder接口,很抱歉没有直接的方法来设置cookie。

一种解决方法是创建您自己的 MyHttpResponseMessage class 实现 HttpResponseMessage 接口。

这里只是一个简单的示例:

HttpResponseMessageBuilder Class

public class HttpResponseMessageBuilder {

    HttpStatusType status; 
    Map<String,String> headers;
    Object body;

    private HttpResponseMessageBuilder(){};

    public static  HttpResponseMessageBuilder newResponseMessage(){
        return new HttpResponseMessageBuilder();
    }

    public HttpResponseMessageBuilder status(HttpStatusType type){
        status = type;
        return this;
    }

    public HttpResponseMessageBuilder header(String key, String value){
        if(headers == null) headers = new HashMap<>();
        headers.put(key, value);
        return this;
    }

    public HttpResponseMessageBuilder body(Object object){
        this.body = object;
        return this;
    }

    public HttpResponseMessageBuilder setCookie(String name,String value, String expire, String path, String domain, Boolean isSecure, Boolean isHttpOnly) {
        StringBuilder sb = new StringBuilder();
        sb.append(name).append("=").append(value);
        if(expire != null)
            sb.append(";expires=").append(expire);

        if(path != null)
            sb.append(";path=").append(path);
        else
            sb.append(";path=").append("/");

        if(domain != null)
            sb.append(";domain=").append(domain);

        if(isSecure)
            sb.append(";Secure");

        if(isHttpOnly)
            sb.append(";HttpOnly");

        header("Set-Cookie", sb.toString());

        return this;
    } 

    public HttpResponseMessage build(){
        MyHttpResponseMessage myHttpResponseMessage = new MyHttpResponseMessage();
        if(status == null) status = HttpStatusType.custom(200);
        myHttpResponseMessage.setStatus(status);
        if(headers == null) headers = new HashMap<>();
        myHttpResponseMessage.setHeaders(headers);
        if(body == null) body = "";
        myHttpResponseMessage.setBody(body);
        return myHttpResponseMessage;
    }
}

MyHttpResponseMessage Class

public class MyHttpResponseMessage implements HttpResponseMessage {

    HttpStatusType status; 
    Map<String,String> headers;
    Object body;

    @Override
    public HttpStatusType getStatus() {
        return status;
    }

    @Override
    public String getHeader(String key) {
        return headers.get(key);
    }

    @Override
    public Object getBody() {
        return body;
    }

    protected void setStatus(HttpStatusType status) {
        this.status = status;
    }


    protected void setHeaders(Map<String, String> headers) {
        this.headers = headers;
    }

    protected void setBody(Object body) {
        this.body = body;
    }

}

最后,您可以在 function 中使用它:

return HttpResponseMessageBuilder.newResponseMessage()
            .setCookie("SessionID", "1F5E409AE7020538130D15ACC54530F9", null, "/", ".domian.com", true, false)
            .body("123456789").build();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM