Index: jaxrs/resteasy-jaxrs/src/main/java/org/jboss/resteasy/specimpl/UriBuilderImpl.java =================================================================== --- jaxrs/resteasy-jaxrs/src/main/java/org/jboss/resteasy/specimpl/UriBuilderImpl.java (revision 1271) +++ jaxrs/resteasy-jaxrs/src/main/java/org/jboss/resteasy/specimpl/UriBuilderImpl.java (revision ) @@ -418,14 +418,27 @@ if (!param.equals(name)) continue; if (!isEncoded) { + if (matcher.groupCount() == 2) + { - value = Encode.encodePath(value); - } - else - { + value = Encode.encodePath(value); + } + else + { + value = Encode.encodePathSegment(value); + } + } + else + { value = Encode.encodeNonCodes(value); } // if there is a $ then we must backslash it or it will screw up regex group substitution value = value.replace("$", "\\$"); + if(matcher.groupCount() == 2){ + String pattern = matcher.group(2).substring(1); + if(!pattern.matches(value)){ + throw new IllegalArgumentException("The parameter value: " + value + " doesn't match the given pattern: " + pattern); + } + } matcher.appendReplacement(buffer, value); } matcher.appendTail(buffer);