Spring RestController语言 - 找不到 java.lang.Integer 类型的返回值的转换器



我目前正在尝试用 spring 创建我的第一个休息服务,我不希望他返回 XML 结果(基于 JAXB(。

在非常基本的 REST 控制器上:

import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
@RestController
public class CVIController {
    @RequestMapping(value = "/resume")
    public @ResponseBody
    Integer getResume() {
        return 5;
    }
}

带有弹簧服务.xml非常空

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    <context:component-scan base-package="fr.urouen"
    />
    <mvc:annotation-driven />
</beans>

还有一个 JDK8 下的 Tomcat 服务器,所以我可以确定默认情况下所有模块都在 JVM 上加载......我抛出了以下异常:

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.IllegalArgumentException: No converter found for return value of type: class java.lang.Integer

我不想使用杰克逊,因为我知道JAXB可以处理这个问题。但是在玩弄了我代码的某些部分之后,我仍然找不到为什么她被扔的答案。

编辑 1:

我试图创建一个虚拟类,答案说

public class Dummy {
    private int value;

    public int getValue() {
        return value;
    }
    public void setValue(int value) {
        this.value = value;
    }
}
@RestController
public class CVIController {
    @RequestMapping(value = "/resume")
    public ResponseEntity<Dummy> getResume() {
        Dummy dummy = new Dummy();
        dummy.setValue(5);
        return new ResponseEntity<Dummy>(dummy, HttpStatus.OK);
    }
}

但仍然得到完全相同的结果:

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.IllegalArgumentException: No converter found for return value of type: class fr.urouen.model.Dummy

最简单的解决方案是返回一个字符串并删除@ResponseBody注释。 根据定义,作为 rest 控制器,返回一个字符串,这就是此特定示例的方法。

如果你想要一个更全面的解决方案,Spring 默认使用 Jackson 来完成从对象到 JSON 的转换。 @ResponseBody会自动执行此操作。

我很确定 Integer 不起作用,因为它不是一个带有 getter 和 setter 的 POJO,也不是可以转换为 JSON 的东西。 即 { 5 } 不是有效的 JSON 对象。

如果你有这样的课程:

public class returnObject() {
  private int value;
  ... getters/setters
}

然后这样做:

@RestController
@ResponseBody
public ReturnObject getValue() {
   ReturnObject ret = new ReturnObject();
   ret.setValue(5);
   return ret;
}

然后你会得到这个:

{ "value" : 5 }

您还需要将杰克逊添加到您的pom中:

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

ResponseEntity 用于从 restcontroller 返回一些内容,您是否尝试过ResponseEntity

@RestController
public class CVIController {
    @RequestMapping(value = "/resume")
    public @ResponseBody ResponseEntity<?> getResume() {
        return ResponseEntity.ok(5);
    }
}

或者你可以写

@RestController
public class CVIController {
    @RequestMapping(value = "/resume")
    public @ResponseBody ResponseEntity<Integer> getResume() {
        return new ResponseEntity<Integer>(5, HttpStatus.OK);
    }
}

您可以从这里获得更多示例

我也遇到了这个promblem,尝试下载jackson-databind.jar,ackson-core.jar,ackson-annotations.jar并将它们放在您的WEB-INF/lib目录中

相关内容

最新更新