当前位置: 首页 > 知识库问答 >
问题:

与spring-boot一起Rest:内容协商失败!类型的返回值找不到转换器

蒋何平
2023-03-14

我试图使用spring-boot 2.1.9和spring Rest在浏览器上以JSON格式获取java POJO的内容。非常基本的例子!但我得到了这个帖子标题上显示的异常。当我用@XmlRootelement注释POJO类时,我会在浏览器上获得XML内容。但是,当我试图在浏览器上获取POJO列表时,我得到了与JSON相同的错误。为什么内容协商部分地适用于XML而根本不适用于JSON?谢谢你的每一个回答。

Whitelabel Error Page

This application has no explicit mapping for /error, so you are seeing this as a fallback.
Thu Oct 03 15:17:06 CEST 2019
There was an unexpected error (type=Internal Server Error, status=500).
No converter found for return value of type: class com.mayo.vina.restapi4.domain.Limit
org.springframework.http.converter.HttpMessageNotWritableException: No converter found for return value of type: class com.mayo.vina.restapi4.domain.Limit
    at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:234)
    at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.handleReturnValue(RequestResponseBodyMethodProcessor.java:181)
    at org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:82)
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:123)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:893)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:798)
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)

我已经尝试了StackOverflow中提供的所有答案。使用jackson-databind扩展POM文件,使用@responsebody、@getmapping而不是@requestmapping,使用produces=“application/json”...对我来说什么都不起作用。

package com.mayo.vina.restapi4;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Restapi4Application {

    public static void main(String[] args) {
        SpringApplication.run(Restapi4Application.class, args);
    }

}
-------------------------------------------------------------------------
package com.mayo.vina.restapi4.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.mayo.vina.restapi4.domain.Limit;

@RestController
public class LimitController
{

    @RequestMapping("/limit")
    public Limit limit()
    {
        return new Limit(1, 10000);
    }
}
---------------------------------------------------------------------------
package com.mayo.vina.restapi4.domain;

//@XmlRootElement
public class Limit
{
    private int minimum;
    private int maximum;

    public Limit()
    {
    }

    public Limit(int minimum, int maximum)
    {
        this.minimum = minimum;
        this.maximum = maximum;
    }

    public int getMinimum()
    {
        return minimum;
    }

    public void setMinimum(int minimum)
    {
        this.minimum = minimum;
    }

    public int getMaximum()
    {
        return maximum;
    }

    public void setMaximum(int maximum)
    {
        this.maximum = maximum;
    }
}
--------------------------------------------------------------------------

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.9.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.mayo.vina</groupId>
    <artifactId>restapi4</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>restapi4</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

共有1个答案

齐建白
2023-03-14

以下内容解决了我的问题:

所以是的,只是重申一下,进入我的maven repo并删除fasterxml文件夹并重新运行maven是解决问题的方法。

 类似资料:
  • 根据这个Spring引导教程,我正在编写一个简单的RESTAPI。在我的本地开发机器(Ubuntu 15.04和Windows 8.1)上,一切都很有魅力。 我有一个旧的服务器,我想在其上部署我的服务。 开始日志正常,但只要我向endpoint发送请求,就会出现以下错误: 然后沿着stacktrace往下看: 整个堆栈跟踪都张贴在这里。 我查看了一些引用此错误的答案,但这些似乎不适用于我的问题,因

  • 问题内容: 有了这个代码 我得到以下异常 我的猜测是,由于缺少Jackson,该对象无法转换为JSON。我不明白为什么,因为我以为杰克逊内置弹簧靴。 然后我试图将Jackson添加到pom.xml中,但是我仍然遇到相同的错误 我是否需要更改任何Spring Boot属性才能使其正常工作? 谢谢 问题答案: 问题是Foo中的一个嵌套对象没有任何对象

  • 编辑:我想出了如何解决这个问题,并在下面的答案中发布了它。 我正在尝试创建一个API来查询数据库并返回两个值。我知道db查询可以工作,因为我可以看到它将值输出到控制台。但当我执行它时,我得到了这个错误:没有找到类型为:class hello的返回值的转换器。获取患者信息 这是我的控制器代码: 这是我的班级: 我肯定我做了一些根本错误的事情,因为我以前从未创建过api,但我只是没有迅速取得进展。任何

  • 问题内容: 我在Spring-boot应用程序中编写了一个简单的REST控制器,但是我不确定如何实现内容协商以使其基于请求标头中的Content- Type参数返回JSON或XML。有人可以告诉我,我在做什么错? 控制器方式: 调用此方法时,我总是会得到JSON(即使我将be 指定为或)。 当我实现两个具有不同映射和不同内容类型的方法时,我可以从xml中获取XML,但是如果我在一个方法中指定两个m

  • 我正在重写旧的rest api,需要保持与它的兼容性。旧api使用servlet并适用于xml和json。逻辑如下: 它检查“Content Type”标题,如果支持(“text/xml”、“application/xml”、“application/json”),则按原样使用 如何使用Spring MVC(使用Spring Boot)获得相同的结果?我尝试在config类中重写configure

  • 我正在遵循从Spring.io构建RESTful Web服务的官方指南。 我在Greeting类中有getter方法,尽管我没有setter。这正是指南上的类。 我尝试在pom.xml上添加fasterxml json依赖项,但是错误消息是一样的。 我的所有设置与指南完全相同,只是应用程序是由dispatch-servlet.xml而不是main方法引导的。 我不认为这是getters的问题(我肯