spring 返回值类型为的转换器未找到:等级

du7egjpx  于 2022-11-21  发布在  Spring
关注(0)|答案(5)|浏览(110)

我正在用Spring-Boot做练习,我试着搜索,但没有找到任何对我有用的东西。我试着返回一个JSON转换一个POJO,SB应该自动完成,但它返回:
2018-11-05 13:26:36.090警告1584 --- [nio-8080-exec-1] .w.s.m.s.默认处理程序异常解析程序:已解决[org.springframework.http.converter.HttpMessageNotWritableException]中无法写入数据的问题。找不到以下类型的返回值的转换器:示例示例示例演示
下面是我的pom.xml:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.0.RELEASE</version>
    <relativePath /> <!-- lookup parent from repository -->
  </parent>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <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-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
      <groupId>com.h2database</groupId>
      <artifactId>h2</artifactId>
    </dependency>
  </dependencies>

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

还有我的POJO:

public class Foo {

    private String bar;

    /**
     * @return the bar
     */
    public String getBar() {
        return bar;
    }

    /**
     * @param bar
     *            the bar to set
     */
    public void setBar(String bar) {
        this.bar = bar;
    }
}

控制器:

@RestController
public class PelisController {
    @GetMapping(value = "/fooPoint")
    public Foo fooPoint() {
        Foo foo = new Foo();
        foo.setBar("smthng");
        return foo;
    }
}

我不知道我做错了什么,因为我试过getters/setters方法,我试过用官方指南中的pom替换我的pom,没有任何帮助。

svmlkihl

svmlkihl1#

我今天刚遇到这个问题,花了几个小时来找出问题所在。我看到的几乎所有答案都是因为缺少getter和setter,或者在pom中添加了fasterxml依赖项。我已经有了getter和setter,我所遵循的教程不需要这些pom更改。
mariotepro的解决方案让我通过了这个问题。他的解决方案被埋在评论下面,所以我决定把它放在答案里,这样人们就可以很容易地看到它,以防他们遇到同样的情况。
所以,是的,只是重申一下,进入我的maven repo,删除fasterxml文件夹,重新运行maven是为我解决这个问题。

2o7dmzc5

2o7dmzc52#

我认为除了getter和setter之外,你还需要一个默认的空构造函数,所以添加这个构造函数就可以了。一个简单的方法就是使用Lombok项目来添加这个构造函数以及get和set方法。
示例如下:

https://github.com/mstine/todo-list/blob/master/src/main/java/io/pivotal/sporing/todos/todolist/TodoItem.java

因此,您只需在Maven中添加依赖项,如下所示:

<!-- For Lombok, data annotations -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>

然后,您可以使用类中的注解,如(代码片段):

import lombok.Data;
import lombok.NoArgsConstructor;

import javax.persistence.*;

@Entity
@Data
@NoArgsConstructor
@Table(name="todo_item")
public class TodoItem {
    @Id
    @GeneratedValue
    private Long id;

注解:@Data和@NoArgsConstructor创建getter、setter和空构造函数,这为您节省了锅炉板代码,我认为这相当整洁:)。
如果您感兴趣,这里有更多信息:https://projectlombok.org/

bksxznpy

bksxznpy3#

从Spring Boot开始,2.5.7 getters或fasterxml不能解决这个问题,但是在@RequestMapping中产生的设置会尝试设置produces = { "application/json" }

@RequestMapping(method = RequestMethod.GET, produces = { "application/json" })
p3rjfoxz

p3rjfoxz4#

人与类似的错误,我只是错过了下面的标题,而点击请求,尝试添加检查它是否工作!
Accept : application/json

monwx1rj

monwx1rj5#

对我来说,当我没有指定带有content-type的头时,就会发生这种情况。
模型类-UserModel.java

@Data 
public class UserModel {
    
    private String username;
    private long userid;

}

使用此link设置lombok
控制器类-BasicController.java

@RestController
public class BasicController {

    ArrayList<UserModel> users = new ArrayList<>();
    
    @PostMapping(
            path="/push/user", 
            produces = {MediaType.APPLICATION_XML_VALUE, MediaType.APPLICATION_JSON_VALUE}, 
            consumes = {MediaType.APPLICATION_XML_VALUE, MediaType.APPLICATION_JSON_VALUE}
    )
    public ResponseEntity<UserModel> pushUser(@RequestBody UserModel user)
    {
        System.out.println(user.getUsername());
        System.out.println(user.getUserid());
        
        users.add(user);
        return new ResponseEntity<UserModel>(user, HttpStatus.OK);
    }
    
}

当我发送没有标题的数据时发生以下错误

{"timestamp": "2022-11-06T05:35:00.356+00:00",
    "status": 500,
    "error": "Internal Server Error",
    "trace": "org.springframework.http.converter.HttpMessageNotWritableException: No converter for [class com.sp.learner.code.api.controller.UserModel] with preset Content-Type 'null'\n\tat org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:312)\n\tat org.springframework.web.servlet.mvc.method.annotation.HttpEntityMethodProcessor.handleReturnValue(HttpEntityMethodProcessor.java:219)\n\tat org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:78)\n\tat org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:135)\n\tat org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)\n\tat org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)\n\tat org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\n\tat org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1071)\n\tat org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:964)\n\tat org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\n\tat org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:696)\n\tat org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:779)\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n\tat org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n\tat org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n\tat org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n\tat org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)\n\tat org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197)\n\tat org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)\n\tat org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)\n\tat org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135)\n\tat org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\n\tat org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)\n\tat org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:360)\n\tat org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)\n\tat org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\n\tat org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)\n\tat org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1789)\n\tat org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\n\tat org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)\n\tat org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)\n\tat org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\n\tat java.base/java.lang.Thread.run(Thread.java:832)\n",
    "message": "No converter for [class com.sp.learner.code.api.controller.UserModel] with preset Content-Type 'null'",
    "path": "/push/user"
}

解决方案-按如下方式添加标题

相关问题