考虑以下控制器方法:
@RequestMapping(value = "/test", method = RequestMethod.GET)
public void test(@RequestParam(value = "fq", required = false) String[] filterQuery) {
logger.debug(fq = " + StringUtils.join(filterQuery, "|"));
}
Run Code Online (Sandbox Code Playgroud)
以下是不同fq组合的输出:
/test?fq=foo 结果是 fq = foo /test?fq=foo&fq=bar 结果是 fq = foo|bar /test?fq=foo,bar 结果是 fq = foo|bar /test?fq=foo,bar&fq=bash 结果是 fq = foo,bar|bash /test?fq=foo,bar&fq= 结果是 fq = foo,bar|例3是问题.我希望(想要/需要)它输出fq = foo,bar.
我已经尝试用逗号来逃避逗号\并使用其他%3C工作.
如果我看一下HttpServletRequest对象的版本:
String[] fqs = request.getParameterValues("fq");
logger.debug(fqs = " + StringUtils.join(fqs, "|"));
Run Code Online (Sandbox Code Playgroud)
它打印预期的输出:fqs = foo,bar …
我正在Spring 3.1上构建一个REST服务.我正在使用@EnableWebMVC注释.由于我的服务只接受JSON请求,我还想将传入的请求转储到MongoDB集合中以进行日志记录(以及稍后的数据转换).我想访问原始JSON请求(我可以使用"@Content HttpServletRequest请求"作为方法参数在非spring实现上执行).
我是一个春天的新手.所以,请帮助我指明实现这一目标.谢谢!
更新:问题没有完全解决.只有我在GET上的测试才有效.它失败了POST.因此,取消选中接受的答案
问题是,即使我创建了一个HttpServletRequestWrapper,我也无法在处理并包装请求后转发请求.这是发生的事情:
拦截器:
public class DBLogInterceptor extends HandlerInterceptorAdapter {
MyRequestWrapper requestWrapper;
private final static Logger logger = Logger.getLogger(DBLogInterceptor.class);
@Override
public boolean preHandle(
HttpServletRequest request,
HttpServletResponse response,
Object handler) throws Exception
{
requestWrapper = new MyRequestWrapper(request);
// Code removed, but it just dumps requestWrapper.getBody() into DB
return super.preHandle(requestWrapper, response, handler);
}
}
Run Code Online (Sandbox Code Playgroud)
HTTP POST服务方法
@RequestMapping(method = RequestMethod.POST, consumes="application/json", produces="application/json", value = "employee")
@ResponseBody
public String updateEntity(@RequestBody Employee emp) {
// Do some DB Stuff. Anyway, the control …Run Code Online (Sandbox Code Playgroud)