Restlet header传参异常:java.lang.ClassCastException: org.restlet.data.Parameter cannot be cast to org.restlet.engine.header
原因:
The object returned by Response/Request.getAttributes().get("org.restlet.http.headers") is a Series<Header>, not a Form, which is a Series<Parameter>. Because of type erasure, there is no runtime problem until the Restlet Engine tries to make use of the Parameter you stored and treat it as a Header.
private static final String HEADERS_KEY = "org.restlet.http.headers";
...
@SuppressWarnings("unchecked")
static Series<Header> getMessageHeaders(Message message) {
ConcurrentMap<String, Object> attrs = message.getAttributes();
Series<Header> headers = (Series<Header>) attrs.get(HEADERS_KEY);
if (headers == null) {
headers = new Series<Header>(Header.class);
Series<Header> prev = (Series<Header>)
attrs.putIfAbsent(HEADERS_KEY, headers);
if (prev != null) { headers = prev; }
}
return headers;
}
...
// In some method, what you originally wanted to do:
getMessageHeaders(getResponse()).add("Access-Control-Allow-Origin", "*");
//or getRequest()
原因:
The object returned by Response/Request.getAttributes().get("org.restlet.http.headers") is a Series<Header>, not a Form, which is a Series<Parameter>. Because of type erasure, there is no runtime problem until the Restlet Engine tries to make use of the Parameter you stored and treat it as a Header.
private static final String HEADERS_KEY = "org.restlet.http.headers";
...
@SuppressWarnings("unchecked")
static Series<Header> getMessageHeaders(Message message) {
ConcurrentMap<String, Object> attrs = message.getAttributes();
Series<Header> headers = (Series<Header>) attrs.get(HEADERS_KEY);
if (headers == null) {
headers = new Series<Header>(Header.class);
Series<Header> prev = (Series<Header>)
attrs.putIfAbsent(HEADERS_KEY, headers);
if (prev != null) { headers = prev; }
}
return headers;
}
...
// In some method, what you originally wanted to do:
getMessageHeaders(getResponse()).add("Access-Control-Allow-Origin", "*");
//or getRequest()