[英]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 本身保持无状态。
通过检查HttpRequestMessage和HttpRequestMessage.Builder接口,很抱歉没有直接的方法来设置cookie。
一种解决方法是创建您自己的 MyHttpResponseMessage class 实现 HttpResponseMessage 接口。
这里只是一个简单的示例:
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;
}
}
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.