java - 无法从 Spring Restcontroller 以 JSON 形式发送实体对象

标签 java json spring spring-mvc

我正在使用 spring Restcontroller 将实体作为 JSON 对象发送。我已经添加了所有必要的 jar

我的客户类别

public class Customer  implements Serializable {

/**
 * 
 */
private static final long serialVersionUID = 1L;
private Long id;
private String firstName;


public Customer(long id, String firstName) {
    this.id = id;
    this.firstName = firstName;     
}

public Customer() {
}

public Long getId() {
    return id;
}

public void setId(Long id) {
    this.id = id;
}

public String getFirstName() {
    return firstName;
}

public void setFirstName(String firstName) {
    this.firstName = firstName;
}


}

已添加 JAR

commons-logging-1.2.jar、jackson-core-asl-1.9.13.jar、jackson-mapper-asl-1.9.13.jar、jackson-databind-2.9.0.jar、spring-aop、spring -core,spring-beans,spring-context, spring-express, spring-web, spring-webmvc(全部4.3.9版本)

我没有任何xml配置,它是纯注释配置。我的代码是

应用配置

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "net.ifg.spring")
public class AppConfig {

}

应用程序初始化器

public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

@Override
protected Class[] getRootConfigClasses() {
    return new Class[] { AppConfig.class };
}

@Override
protected Class[] getServletConfigClasses() {
    return null;
}

@Override
protected String[] getServletMappings() {
    return new String[] { "/" };
}

}

客户模型类

public class Customer  implements Serializable {

/**
 * 
 */
private static final long serialVersionUID = 1L;
private Long id;
private String firstName;


public Customer(long id, String firstName) {
    this.id = id;
    this.firstName = firstName;     
}

public Customer() {
}

// setters and getters of id and name

}

@RestController
public class CustomerRestController {

@Autowired
private CustomerDAO customerDAO;

@SuppressWarnings({ "rawtypes", "unchecked" })
@GetMapping("/customers/{id}")
public ResponseEntity getCustomer(@PathVariable("id") Long id) {
    System.out.println("Customer ID :"+id);         
    return new ResponseEntity(new Customer(101,"Aliya"), 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 net.qiib.spring.model.Customer
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:982)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
javax.servlet.http.HttpServlet.service(HttpServlet.java:624)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

root cause

java.lang.IllegalArgumentException: No converter found for return value of type: class net.qiib.spring.model.Customer
org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:187)
org.springframework.web.servlet.mvc.method.annotation.HttpEntityMethodProcessor.handleReturnValue(HttpEntityMethodProcessor.java:203)
org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:81)
org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:113)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738)
org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
javax.servlet.http.HttpServlet.service(HttpServlet.java:624)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

P.S:我没有使用任何 XML 配置,仅使用注释配置。

最佳答案

您可以使用 Spring Boot。我建议您使用本指南https://spring.io/guides/gs/rest-service/

关于java - 无法从 Spring Restcontroller 以 JSON 形式发送实体对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46074904/

相关文章:

java - Runtime.getRuntime().availableProcessors()

java - 使用 Gson 获取 MalformedJsonException 错误

java - Spring 应用程序无法使用 ActiveJDBC 检测类启动

java - 我如何在 gradle 中打印出 JAVA 类路径?

java - 在 JAVA 中从 main 访问函数内的数组或变量

java - 使用java代码运行jar时出错

c# - 如何将JSON对象数组反序列化为c#结构

javascript - 访问 JavaScript JSON 中的对象属性

java - 应该同步哪些代码块?

java - Spring - Bean 没有被注入(inject)