在到达spring控制器之前,如何从UI端修改请求体中发送的JSON对象?
我尝试添加过滤器,但是一旦我从请求(servletrequest.getReader())读取,然后将请求转发到过滤器链中的下一个过滤器,它就会失败(请求无法到达控制器)。
BufferedReader reader = servletrequest.getReader();
String line;
while ((line = reader.readLine()) != null) {
buffer.append(line);
String data = buffer.toString();
使用这个,我得到了字符串中的JSON,但我无法弄清楚如何将其放回请求中。
使用Spring的HandlerInterceptor。您还可以专门选择拦截特定请求。检查本教程。这取决于您使用的Spring版本。但这应该给你一个公平的视角来看待如何去做。
package com.test.intercept;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.json.JSONArray;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
public class HttpRequestInterceptor extends HandlerInterceptorAdapter {
@Autowired
private ServletContext context;
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
HandlerMethod handlerMethod = (HandlerMethod) handler;
String methodName = handlerMethod.getMethod().getName();
Map<String, String> headerMap = HttpUtil.getAllHeaders(request);
Boolean isAllowed=false;
//doing what you want to your json
//
return isAllowed;
}
@Override
public void afterCompletion(HttpServletRequest arg0,
HttpServletResponse arg1, Object arg2, Exception arg3)
throws Exception {
logger.info("in after completion");
}
@Override
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,
Object arg2, ModelAndView arg3) throws Exception {
logger.info("in posthandle");
}
并在您的 servlet上下文中.xml添加:
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/api/**" /> <!--to exclude a path -->
<mvc:exclude-mapping path="/web/**" /> <!--to exclude a path -->
<beans:bean class="com.test.interceptor.HttpRequestInterceptor"></beans:bean>
</mvc:interceptor>
</mvc:interceptors>
我有一个spring boot应用程序。我更改每个post请求的请求正文。是否可以在请求到达控制器之前修改请求正文。请附上一个例子。
问题内容: 我已经使用像这样的控制器构建了json REST服务: 它工作正常,但现在我需要修改所有响应,并向所有响应添加“状态”和“消息”字段。我已经阅读了一些解决方案: 从某个特定类的所有控制器方法对象返回,例如RestResponse,它将包含“ status”和“ message”字段(但这不是通用解决方案,因为我将不得不修改所有控制器并以新样式编写新控制器) 截取具有方面的所有控制器方法
我用这样的控制器构建了一个json REST服务: 它工作得很好,但是现在我需要修改所有的响应,并为它们添加“状态”和“消息”字段。我读过一些解决方案: 从所有控制器方法返回某个特定类的对象,例如RestResponse,它将包含“状态”和“消息”字段(但这不是通用解决方案,因为我必须修改所有控制器并以新样式编写新控制器) 拦截所有带有方面的控制器方法(但在这种情况下,我无法更改返回类型) 如果我
我正在使用Java和Spring构建一个RESTAPI,我需要在我的控制器中处理一个POST请求,但我需要从该请求中提取主体,它是一个JSON,也是该请求的“来源”, 我有几个问题:首先是如何获取该请求的来源(我猜是在标题中移动的url?),是否有与@RequestBody类似的注释?。 我的第二个问题是,在这种post方法中,通常应该返回什么对象作为响应。
我有一个使用Spring MVC 3.1.3的应用程序和使用Dojo1.4开发的UI。应用程序只有很少的控制器处理通过上传的二进制文件。控制器发送一个json响应,该响应必须用 我实现了web.xml中定义的自定义筛选器: 提前道谢。 更新:我禁用了Spring Security性,并用普通spring mvc进行了测试,但问题仍然存在。我修改了标题和问题描述。
我正在开发我的第一个基于spring的项目样本。下面是我的dispatcher-servlet.xml的摘录。 我尝试向以下url发布帖子,但它似乎从未到达相应的控制器类: 网址: post<code>{“testID”:“1”} 就是回应。 为什么我得到400错误,尽管一切似乎都在地方?