【问题标题】:Migration of Spring from 3.2 to 4.1.1: trouble with JSON serializationSpring 从 3.2 迁移到 4.1.1:JSON 序列化问题
【发布时间】:2014-12-30 08:33:26
【问题描述】:

我最近将我们的项目从 Spring 3 迁移到 Spring 4.1.1。我还将 jackson 从版本 1 迁移到版本 2.3.0。

现在,我在使用带有 void 响应的控制器时遇到问题

@RequestMapping(value="toto", method="POST")
public @ResponseBody void myController() {
//content
}

在运行时,当调用它时,我得到了这种形式的异常:

Failed to evaluate serialization for type [void]: java.lang.IllegalStateException: Failed to instantiate standard serializer (of type com.fasterxml.jackson.databind.ser.std.NullSerializer): Class com.fasterxml.jackson.databind.ser.BasicSerializerFactory can not access a member of class com.fasterxml.jackson.databind.ser.std.NullSerializer with modifiers "private"

我想知道是否有人遇到过同样的问题或知道出了什么问题。

提前致谢。

【问题讨论】:

    标签: spring-mvc migration jackson


    【解决方案1】:

    如果你想使用 void 返回类型,你需要用@ResponseStatus(value = HttpStatus.OK)注解方法:

    @RequestMapping(value = "/usage")
    @ResponseStatus(value = HttpStatus.OK)
    public void doSomething(HttpServletRequest request, ...
    

    详情见What to return if Spring MVC controller method doesn't return value?

    【讨论】:

    • 不错!这就是我所缺少的。
    【解决方案2】:

    当 Spring 正在等待返回值以使用 HttpMessageConverters 进行序列化时,您的方法没有返回任何内容。你应该有这样的东西:

    @RequestMapping(value="toto", method="POST")
    @ResponseBody
    public FooBar myController() {
      // 
      return fooBar;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-07
      • 2022-12-09
      • 2017-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-25
      相关资源
      最近更新 更多