Spring Boot应用程序:找不到类型为

时间:2015-11-20 17:34:18

标签: rest ubuntu spring-boot converter

我正在根据this Spring-Boot教程编写一个简单的REST API。在我的本地开发机器(Ubuntu 15.04和Windows 8.1)上,一切都像魅力一样。

我有一个旧的32位Ubuntu 12.04 LTS服务器,我想部署我的REST服务。

启动日志没问题,但是一旦我向/ user / {id}端点发送GET请求,我就会收到以下错误:

java.lang.IllegalArgumentException: No converter found for return value of type: class ch.gmazlami.gifty.models.user.User

然后沿着堆栈跟踪:

java.lang.IllegalArgumentException: No converter found for return value of type: class java.util.LinkedHashMap

整个堆栈跟踪已发布here

我查了一些引用这个错误的答案,但那些似乎不适用于我的问题,因为我使用的是Spring-Boot,没有任何xml配置。

受影响的控制器是:

    @RequestMapping(value = "/user/{id}", method = RequestMethod.GET)
public ResponseEntity<User> getUser(@PathVariable Long id){
    try{
        return new ResponseEntity<User>(userService.getUserById(id), HttpStatus.OK);
    }catch(NoSuchUserException e){
        return new ResponseEntity<>(HttpStatus.NOT_FOUND);
    }
}

非常感谢任何帮助。这是非常奇怪的,因为完全相同的东西在其他机器上完美地工作。

提前致谢!

6 个答案:

答案 0 :(得分:19)

您应该对pom.xml和mvc-dispatcher-servlet.xml文件进行一些更改: 将以下依赖项添加到您的pom.xml:

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

并更新你的mvc-dispatcher-servlet.xml:

<mvc:annotation-driven>
     <mvc:message-converters>
            <bean class="org.springframework.http.converter.StringHttpMessageConverter"/>
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
   </mvc:message-converters>
</mvc:annotation-driven>

答案 1 :(得分:19)

这发生在我身上,仅在一种资源上(一种方法),我不明白为什么。同一个包中的类中的所有方法,具有相同的注释,对ResponseEntity.ok(...)的相同调用等都是有效的。

但不是这个。

事实证明我忘了在我的POJO课程中产生吸气剂了!

一旦我添加它们就行了。

希望最终可以节省一些人的时间......

答案 2 :(得分:6)

当你忘记&#34; build&#34;拨打:

return ResponseEntity.status(HttpStatus.BAD_REQUEST);

应该是:

return ResponseEntity.status(HttpStatus.BAD_REQUEST).build();

答案 3 :(得分:1)

我遇到了这个问题,因为我省略了GettersSetters方法。

答案 4 :(得分:0)

我正在使用IntelliJ Idea及其自动生成的吸气剂和吸气剂。由于我有一个名为success的布尔值字段,因此将getter命名为isSucccess()。我将其重命名为getSuccess(),错误消失了。

答案 5 :(得分:0)

补充其余的答案:大多数方法是公开

我的 IDE 标记方法可能是“仅包”,提示我删除声明的“公共”部分(我愚蠢地做了)。

我在方法中添加了 public 并解决了问题。