Tengo un caso en el que necesito redirigir mi objeto de solicitud HTTP a otros controladores/clases para su posterior procesamiento. El problema es que en algunos controladores, me gustaría obtener un mejor control sobre los parámetros que estoy reenviando a la siguiente clase: modificarlos, editarlos, eliminarlos. Entonces, me gustaría saber si hay una buena práctica/patrón para lograr este control básico en los parámetros de solicitud de HTTP.¿la mejor manera de eliminar un parámetro HttpServletRequest en un controlador/clase?
Respuesta
La buena práctica es envolver el objeto de solicitud en otro objeto utilizando un filtro de servlet. Como HttpServletRequest es una interfaz, puede escribir su propia implementación de la misma. Su implementación puede contener la solicitud que recibió y delegar todos y cada uno de sus propios métodos al objeto de solicitud original, pero también puede modificar los valores de devolución como lo considere oportuno. Por lo tanto, sus métodos getParameter() etc. podrían llamar al mismo método en el objeto de solicitud original y modificar el resultado como mejor le parezca antes de devolverlo.
class MyHttpServletRequestWrapper implements HttpServletRequest {
private HttpServletRequest originalRequest;
public MyHttpServletRequestWrapper(HttpServletRequest originalRequest) {
this.originalRequest = originalRequest;
public String getAuthType() {return originalRequest.getAuthType();}
public String getQueryString() {return originalRequest.getQueryString();}
// etc.
public Map getParameterMap() {
Map params = originalRequest.getParameterMap();
params.remove("parameter-to-remove");
params.put("parameter-to-add", "<a value>");
//etc.
}
}
Su filtro de servlet:
class MyFilter implements Filter {
public void init(FilterConfig config) {
// perhaps you might want to initialize something here
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
HttpServletRequest originalRequest = (HttpServletRequest) request;
HttpServletRequest newRequest = new MyHttpServletRequest(originalRequest);
chain.doFilter(newRequest, response);
}
}
También puede subclase javax.servlet.request.HttpServletRequestWrapper, lo que le ahorrará un montón de trabajo.
Consulte este post para más.
Si lo que busca es un sencillo de una sola línea, esta expresión regular técnica funcionó para mí:
myURL = myURL.replaceAll("[&?]clear=([^&]$|[^&]*)", "");
Si lo necesita en Javascript, que es de hecho muy similar - que es agradable!
var myUrl = (""+window.location).replace(/&?clear=([^&]$|[^&]*)/i, "");
claro es el nombre del parámetro a ser eliminado.
- 1. ¿Cómo establecer un parámetro en HttpServletRequest?
- 2. WPF: la mejor manera de eliminar un elemento de ItemsSource
- 3. La mejor manera de eliminar los elementos de la lista en un bucle en C#
- 4. ¿La mejor manera de eliminar un elemento de un diccionario de Python?
- 5. La mejor manera de reorganizar un ArrayList en Java
- 6. La mejor manera de comenzar un proyecto
- 7. La mejor manera de borrar un UITextField
- 8. ¿La mejor manera de simular un dominio?
- 9. Hibernar: la mejor manera de eliminar elementos en una colección
- 10. ¿La mejor manera de invocar un código cruzado?
- 11. ¿Cuál es la mejor manera de vaciar un directorio?
- 12. La mejor/manera fácil de configurar un arranque rápido Linux
- 13. La mejor manera de eliminar elementos de una colección
- 14. Git: la mejor manera de eliminar todos los cambios de un archivo determinado para una rama
- 15. Java: la mejor manera de eliminar Javascript de HTML
- 16. ¿La mejor manera de ejecutar periódicamente un script PHP?
- 17. La mejor manera de consultar un diccionario en C#
- 18. La mejor manera de registrar un usuario en Django
- 19. ¿La mejor manera de manejar múltiples UITableViews en un UIViewController?
- 20. La mejor manera de abrir un socket en Python
- 21. La mejor manera de crear un mapa vacío en Java
- 22. ¿La mejor manera de devolver un objeto en C++?
- 23. La mejor manera de configurar un programa modular en C#
- 24. La mejor manera de construir un filtro múltiple en rieles
- 25. La mejor manera de crear un mapa en movimiento
- 26. La mejor manera de crear un ViewModel en MVVM
- 27. La mejor manera de crear un collage (en Java)
- 28. La mejor manera de ordenar una colección en un CompositeView
- 29. ¿La mejor manera de organizar entidades en un juego?
- 30. La mejor manera de filtrar un diccionario en Python
Aunque la publicación a la que enlaza contiene más información, debe especificar que esto debe hacerse usando un filtro (si eso es lo que quiere decir). – Vetle
muchas gracias. Usaré los filtros y la clase contenedora para el objeto HttpRequest. –