A diferencia de doGet()
y doPost()
métodos, que no son capaces de obtener los parámetros de la petición utilizando el método getParameter()
en doPut()
y doDelete()
métodos. Necesitamos recuperarlos manualmente del flujo de entrada.
El siguiente método recupera los parámetros de solicitud y los devuelve en un mapa:
public static Map<String, String> getParameterMap(HttpServletRequest request) {
BufferedReader br = null;
Map<String, String> dataMap = null;
try {
InputStreamReader reader = new InputStreamReader(
request.getInputStream());
br = new BufferedReader(reader);
String data = br.readLine();
dataMap = Splitter.on('&')
.trimResults()
.withKeyValueSeparator(
Splitter.on('=')
.limit(2)
.trimResults())
.split(data);
return dataMap;
} catch (IOException ex) {
Logger.getLogger(Utils.class.getName()).log(Level.SEVERE, null, ex);
} finally {
if (br != null) {
try {
br.close();
} catch (IOException ex) {
Logger.getLogger(Utils.class.getName()).log(Level.WARNING, null, ex);
}
}
}
return dataMap;
}
El ejemplo utiliza la biblioteca de Google guayaba para analizar los parámetros. Para obtener un ejemplo completo que contiene los métodos doGet()
, doPost()
, doPut()
y doDelete()
, puede leer mi Using jsGrid tutorial.
¿Por qué estás tratando de usarlo de una manera que no es para? Sin embargo, puedes jugar con lo que quieras. –
Me encuentro con el mismo problema: estoy tratando de implementar un servicio restfull, PUT está destinado a reemplazar el recurso. Jetty hace que todos los datos estén disponibles en el mapa de parámetros de solicitud, sin embargo tomcat no ... – Andrej
De acuerdo con Java Web Services: Up and Running, "doPost y doPut difieren significativamente porque el tiempo de ejecución de los contenedores de servlet no genera un mapa de parámetros utilizable. es el caso tanto en Tomcat como en Jetty) " – Jason