Java Urlrewrite Filter no puede encontrar una coincidencia
-
25-10-2019 - |
Pregunta
Estoy usando el filtro UrlReWrite de Tuckey ( http://www.tuckey.org/urlrewrite/ )
Ahora creé algunas reglas, pero hay un caso que me da dolores de cabeza. La url: /Group/1/Actualizar debe reescribirse como: /grupo? Id = 1 & Action = Update
Creé un patrón regexp para este caso: ^/grupo/([0-9]+)/( w*) $, pero el filtro no puede reescribirlo. No hay partido.
Dentro de mi caso de prueba ejecuté esta URL a través de todos mis patrones, solo para verificar. Y encontré el partido como esperaba.
assertFalse( "/group/1/update".matches("^/group/create$") );
assertFalse( "/group/1/update".matches("^/group/save$") );
assertFalse( "/group/1/update".matches("^/group/([0-9]+)/?$") );
assertTrue( "/group/1/update".matches("^/group/([0-9]+)/(\\w*)$") );
assertFalse( "/group/1/update".matches("^/group/([0-9]+)/(\\w*)\\?(.*)+$") );
Entonces, ¿cómo es que el filtro no puede encontrar una regla?
Solo para incluir todo, aquí está mi urlrewrite.xml, o parte de él:
<rule>
<from>^/group/create$</from>
<to>/group?action=create</to>
</rule>
<rule>
<from>^/group/save$</from>
<to>/group?action=save</to>
</rule>
<rule>
<from>^/group/([0-9]+)/?$</from>
<to>/group?id=$1&action=show</to>
</rule>
<rule>
<from>^/group/([0-9]+)/(\\w*)$</from>
<to>/group?id=$1&action=$2</to>
</rule>
<rule>
<from>^/group/([0-9]+)/(\\w*)\\?(.*)+$</from>
<to>/group?id=$1&action=$2&$3</to>
</rule>
Adiós
Adrio
Solución
Deberías usar una barra inalcadora única \
en lugar de doble invernastra \\
.
<rule>
<from>^/group/([0-9]+)/(\w*)$</from>
<to>/group?id=$1&action=$2</to>
</rule>
<rule>
<from>^/group/([0-9]+)/(\w*)\?(.*)+$</from>
<to>/group?id=$1&action=$2&$3</to>
</rule>
En el código Java, la doble backalsh se usa para representar una sola barra invertida. Dado que la cadena se lee desde el archivo externo, no hay necesidad de escapar de la barra insegura.