public static final Variant jsonVariant
= Variant.mediaTypes(MediaType.APPLICATION_JSON_TYPE).add().build().get(0);
public static Variant getVariant(HttpHeaders headers) {
// copied (except for the acceptHeaders fix) from RestEasy's RequestImpl class
ServerDrivenNegotiation negotiation = new ServerDrivenNegotiation();
MultivaluedMap<String, String> requestHeaders = headers.getRequestHeaders();
List<String> acceptHeaders = requestHeaders.get(ACCEPT);
// Fix
if( acceptHeaders != null && ! acceptHeaders.isEmpty() ) {
List<String> fixedAcceptHeaders = new ArrayList<String>();
for(String header : acceptHeaders ) {
fixedAcceptHeaders.add(header.replaceAll("q=\\.", "q=0."));
}
acceptHeaders = fixedAcceptHeaders;
}
negotiation.setAcceptHeaders(acceptHeaders);
negotiation.setAcceptCharsetHeaders(requestHeaders.get(ACCEPT_CHARSET));
negotiation.setAcceptEncodingHeaders(requestHeaders.get(ACCEPT_ENCODING));
negotiation.setAcceptLanguageHeaders(requestHeaders.get(ACCEPT_LANGUAGE));
return negotiation.getBestMatch(variants);
// ** use below instead of above when RESTEASY-960 is fixed **
// return restRequest.selectVariant(variants);
}