小编nic*_*dos的帖子

如何防止参数绑定解释Spring 3.0.5中的逗号?

考虑以下控制器方法:

@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组合的输出:

  1. /test?fq=foo 结果是 fq = foo
  2. /test?fq=foo&fq=bar 结果是 fq = foo|bar
  3. /test?fq=foo,bar 结果是 fq = foo|bar
  4. /test?fq=foo,bar&fq=bash 结果是 fq = foo,bar|bash
  5. /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 …

java data-binding spring spring-mvc

53
推荐指数
3
解决办法
2万
查看次数

尝试在"文件名"部分创建具有多个点的REST-ful URL - Spring 3.0 MVC

我正在使用Spring MVC(3.0)和注释驱动的控制器.我想为资源创建REST-ful URL,并且不能要求(但仍然可选地允许)URL末尾的文件扩展名(但如果没有扩展名,则假定为HTML内容类型).只要文件名部分没有点(句点/句号),这就可以与Spring MVC一起开箱即用.

但是,我的某些网址需要名称中带有点的标识符.像这样:

http://company.com/widgets/123.456.789.500
Run Code Online (Sandbox Code Playgroud)

在这种情况下,Spring会查找扩展的内容类型,.500并找不到任何错误.我可以使用解决方法,如添加.html到最后,编码标识符或添加尾部斜杠.我对这些不满意,但可能会加入.html.

我没有成功地寻找一种覆盖Spring中默认文件扩展名检测的方法.

是否可以为给定的控制器方法或URL模式等自定义或禁用文件扩展名检测?

java rest spring spring-mvc

15
推荐指数
4
解决办法
1万
查看次数

从Spring 3.0.3.RELEASE升级导致:java.lang.NoSuchFieldError:USER_DECLARED_METHODS

我有一个使用Maven构建的Spring-MVC 3.0 Web应用程序.所有Spring依赖版本都使用maven属性定义<spring.version>3.0.3.RELEASE</spring.version>.当我将版本更改为3.0.4.RELEASE或者3.0.5.RELEASE,然后Web应用程序失败,并出现以下异常:

ERROR: [DispatcherServlet] - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping#0': Initialization of bean failed; nested exception is java.lang.NoSuchFieldError: USER_DECLARED_METHODS
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:290)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:287)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:189)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:557)
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:842)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:416)
        at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:442)
        at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:458)
        at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:339)
        at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:306)
        at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:127)
        at javax.servlet.GenericServlet.init(GenericServlet.java:241)
        at org.mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:433)
        at org.mortbay.jetty.servlet.ServletHolder.doStart(ServletHolder.java:256)
        at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39)
        at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:612)
        at org.mortbay.jetty.servlet.Context.startContext(Context.java:139)
        at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1220)
        at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:510)
        at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:448)
        at org.mortbay.jetty.plugin.Jetty6PluginWebAppContext.doStart(Jetty6PluginWebAppContext.java:110)
        at …
Run Code Online (Sandbox Code Playgroud)

spring maven-2 spring-mvc

9
推荐指数
1
解决办法
2万
查看次数

实现HTTP代理以克服跨站点AJAX请求限制(?)

我有一个Spring-MVC webapp(3.0.5-RELEASE),它需要从另一个子域(通过AJAX从客户端/浏览器)访问另一个webapp的JSON webservices.

我过去通过以下方式解决了这个问题:

  1. 编写一个代理请求的简单控制器,使用Apache Commons HttpClient处理请求.因此,克服了大多数浏览器的跨站点/跨源请求安全限制

  2. 在服务器端实现JSONP服务(在调用我们自己的JSON服务时) - 并非总是可行

在JSONP不可能的情况下,是否有更好的方法(1.)?

和/或

有没有一个库可以为我处理这个?所以我不必HttpClient自己编写所有代码 - 它不是很多代码,但我想知道我是否(非常)重新发明了这个轮子.

java ajax proxy spring spring-mvc

7
推荐指数
1
解决办法
2076
查看次数

Grails 2 - 自动生成JSON输出(就像Spring 3.x一样)

在Spring MVC 3.x中,我可以ContentNegotiatingViewResolver通过将文件扩展名更改为.json或者,将bean 配置为自动呈现JSON或XML中的任何给定端点.xml.我假设Grails中有相同的功能但我找不到它.

我读过的所有内容都说我必须捕获传入的mime类型(使用withFormat),然后render as JSON在我的每个控制器方法中使用(或等效)指定JSON输出(例如,使用Grails渲染JSON?).在我深入研究并开始向控制器添加JSON特定代码之前,我想我会问这里......

所以我的问题是:我是否可以通过简单地为任何给定的URL添加".json"文件扩展名(或更改接受标头)来配置Grails 2来自动生成JSON输出?

grails json

7
推荐指数
1
解决办法
1915
查看次数

Grails文档中的自定义事件侦听器示例

我正在尝试添加自定义GORM事件侦听器类Bootstrap.groovy,如Grails文档中所述,但它不适用于我.以下是直接来自文档的代码:

def init = {
    application.mainContext.eventTriggeringInterceptor.datastores.each { k, datastore ->
        applicationContext.addApplicationListener new MyPersistenceListener(datastore)
    }
}
Run Code Online (Sandbox Code Playgroud)

当我运行它时,编译器会抱怨application和applicationContext为null.我已经尝试将它们添加为类级别成员,但它们没有神奇的有线服务风格.我到目前为止最接近的是:

def grailsApplication
def init = { servletContext ->
    def applicationContext = servletContext.getAttribute(ApplicationAttributes.APPLICATION_CONTEXT)
    grailsApplication.mainContext.eventTriggeringInterceptor.datastores.each { k, datastore ->
        applicationContext.addApplicationListener new GormEventListener(datastore)
    }
}
Run Code Online (Sandbox Code Playgroud)

但我仍然得到错误:java.lang.NullPointerException: Cannot get property 'datastores' on null object.

谢谢阅读...

编辑:版本2.2.1

grails bootstrapping grails-orm mongodb

3
推荐指数
2
解决办法
3033
查看次数