Su Grails 2.3.7, assumere le seguenti mappature url ..Grails non pattern matching url con parametro opzionale
"/foo/$number?" (controller:'test', action:'actionOne')
"/foo/$number?/bar" (controller:'test', action:'actionTwo')
..e regolatore:
class TestController {
def actionOne(){ render "Action_ONE: ${params.number}" }
def actionTwo(){ render "Action_TWO: ${params.number}" }
}
Tutto bene ...
/foo/1 //prints 'Action_ONE: 1'
/foo/2/bar //prints 'Action_TWO: 2'
/foo//bar //prints 'Action_TWO: null'
/foo// //prints 'Action_ONE: null'
... ma
/foo //prints 'Action_TWO: null'
/foo/ //prints 'Action_TWO: null'
Se number
è facoltativo in /foo/$number?
, perché fa /foo
e /foo/
mappa per actionTwo()
?
Questo è replicabile in 2.4.2. Sembra un bug per me, puoi sollevare un problema JIRA qui https://jira.grails.org/browse/GRAILS. – dmahapatro
I componenti opzionali dovrebbero funzionare se non si trovano alla fine dell'URI? –
@IanRoberts Anche se non dichiarato esplicitamente, secondo i documenti, sì, ma questo non è il problema, '/ foo /' non dovrebbe mai mappare a 'action2()'. btw, l'ordine in cui i pattern URL elencati in 'URLMappings.groovy' sono importanti in termini di precedenza? Non ci credo, solo curioso. – raffian