2011-09-06 13 views
5

¿Hay alguna manera de usar un valor Enum en una Asignación de solicitud?¿Es posible usar un valor para @RequestMapping que es una cadena pero no un literal de cadena?

@RequestMapping(value = "/example", 
method = RequestMethod.POST) 
public final void foo(final HttpServletResponse response, 

Quiero usar un valor URL que ya está almacenado en una enumeración.

Sin embargo, obtengo errores de tiempo de compilación cuando trato de poner algo excepto un literal String en el RequestMapping.

¿Cómo sabe la diferencia entre un String literal y un String que no es un String literal (no estoy seguro de cómo se llama)?

Esto es lo que he intentado pero fracasó en tiempo de compilación:

@RequestMapping(value = FooEnum.Example.getStringValue(), 
method = RequestMethod.POST) 
public final void foo(final HttpServletResponse response, 

También he intentado usar String.format pero no le gusta que o bien:

@RequestMapping(value = String.format("%s", FooEnum.Example.getStringValue()), 
method = RequestMethod.POST) 
public final void foo(final HttpServletResponse response, 

Respuesta

1

valores literales Sólo se pueden asignar a los atributos de anotación porque deben conocerse en tiempo de compilación cuando se procesan las anotaciones. Sí, podría usar un valor enum, donde "valor enum" es FooEnum.Example, pero no en un atributo que toma un valor String y no puede invocar un método en él.

+2

No valores literales * solo *, sino valores constantes (en tiempo de compilación), incluso expresiones como '" PO "+" ST "' siempre que se evalúen como constantes. Esta es la razón por la cual 'RequestMethod.POST' es un valor de atributo válido en la anotación, pero las llamadas a método no lo son. –

0

Atar su URL a un valor enum parece gracioso; No quisiera que mis URL cambien si actualicé la enumeración. ¿Estás realmente generando los enlaces del cliente usando estas mismas enumeraciones? ¿Tal vez podrías consultar el bean Spring's Handler para las URL?

También existe la Spring Expression Language, pero sólo sé que funciona en las anotaciones @value, no estoy seguro acerca de @RequestMapping

Si usted está tratando de recuperar varias direcciones URL en un método, se puede usar @PathVariable

Cuestiones relacionadas