【问题标题】:Spring 5.0.4 & Jackson2 throws excepiton on startupSpring 5.0.4 & Jackson2 在启动时抛出异常
【发布时间】:2018-10-16 07:57:46
【问题描述】:

我正在尝试制作简单的 REST 服务,但遇到了 2 个问题。 1. REST控制器的任何方法都返回406 http错误;

@GetMapping(value = "/getUser/{id}", headers = "Accept=application/json",
        produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
@ResponseBody
public ResponseEntity<Object> getUser(@PathVariable(value = "id")Long id) {
    if (id == null) return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
    UserInfo userInfo = userService.get(id);


    if (userInfo == null) return new ResponseEntity<>(HttpStatus.NOT_FOUND);
    return new ResponseEntity<>(userInfo, HttpStatus.OK);
}
@GetMapping(value = "/getUsers", headers = "Accept=application/json",produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public List<UserInfo> getUsers()
{
    return userService.getAll();
}

所以谷歌告诉我,这个问题可能在于缺少 Jackson2 依赖项。 但是添加此依赖项会导致此错误,添加较低版本会导致相同的输出或 406

 <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-core</artifactId>
        <version>2.4.4</version>
    </dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.4.4</version>
</dependency>


> 06-May-2018 15:36:45.477 WARNING [http-nio-25565-exec-3]
> org.springframework.context.support.AbstractApplicationContext.refresh
> Exception encountered during context initialization - cancelling
> refresh attempt:
> org.springframework.beans.factory.BeanCreationException: Error
> creating bean with name 'requestMappingHandlerAdapter' defined in
> class path resource
> [org/springframework/web/servlet/config/annotation/DelegatingWebMvcConfiguration.class]:
> Bean instantiation via factory method failed; nested exception is
> org.springframework.beans.BeanInstantiationException: Failed to
> instantiate
> [org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter]:
> Factory method 'requestMappingHandlerAdapter' threw exception; nested
> exception is java.lang.NoClassDefFoundError:
> com/fasterxml/jackson/databind/exc/InvalidDefinitionException

我做错了什么?

【问题讨论】:

  • 什么时候得到406码?您是否尝试从浏览器访问?
  • 这可能是由接受标头引起的,您不需要这样做,因为您没有在正文中发送任何内容。你也可以使用consumes属性
  • @MạnhQuyếtNguyễn 是的
  • @zakariaamine 如果我尝试通过浏览器访问,我应该使用什么媒体类型?
  • consumes 指的是方法或端点所期望的内容类型,而不是您收到的内容类型(例如浏览器)。您收到的内容由produces 定义

标签: java spring rest jackson2


【解决方案1】:

在 Spring 5 或更高版本中,BeanInstantiationException 类负责将 java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/exc/InvalidDefinitionException 作为嵌套异常抛出.

从上面的异常可以看出,这个异常的根本原因是缺少类 InvalidDefinitionException。自 2.9.0 版本起,此类已在 jackson 数据绑定 API 中引入。

所以要解决这个问题,只需添加 2.9.0 或更高版本的 jackson 数据绑定依赖项


com.fasterxml.jackson.core
jackson-databind
2.9.0版本>
依赖>

谢谢!!

【讨论】:

  • 我想知道是否有任何方法可以将 2.6.7 或 2.6.0 与 Spring 5.xy 一起使用。我对一些适用于 2.6.7 但不适用于 2.6.7 的复杂响应层次结构有一些麻烦任何较新的版本。我必须将 Spring 从 4.2.x 升级到 5.x.y,但 Spring 还需要更新版本的 jackson,因此它会崩溃。
猜你喜欢
  • 2021-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-14
  • 1970-01-01
  • 2019-06-23
  • 2013-05-24
相关资源
最近更新 更多