我试图在控制器中的一个方法中使用这样的HashMap返回json
//list all users
@RequestMapping(value = "/user",method = RequestMethod.GET)
public ResponseEntity<Map<String,Object>> handleRequest() throws Exception{
List<User> users = userService.list();
Map<String, Object> message = new HashMap<String, Object>();
message.put("severity", "info");
message.put("user", users);
message.put("summary", "Not successfully.");
message.put("code", 200);
Map<String, Object> json = new HashMap<String, Object>();
json.put("success", true);
json.put("message", message);
return new ResponseEntity<Map<String,Object>>(message,HttpStatus.CREATED);
}
当我在PostMan中点击这个方法时,我得到了这个错误
org.springframework.http.converter.HttpMessageNotWritableException: No converter found for return value of type: class java.util.HashMap
org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:226)
org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.handleReturnValue(RequestResponseBodyMethodProcessor.java:180)
org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:82)
org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:119)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:877)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:783)
org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:991)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:925)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:974)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:866)
javax.servlet.http.HttpServlet.service(HttpServlet.java:635)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:851)
javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
这就是我设置应用程序的方式
@Configuration
@ComponentScan("com.fyt.fyt")
@EnableTransactionManagement
public class ApplicationContextConfig {
@Bean
public InternalResourceViewResolver getViewResolver() {
InternalResourceViewResolver internalResourceViewResolver = new InternalResourceViewResolver();
internalResourceViewResolver.setPrefix("/WEB-INF/views/");
internalResourceViewResolver.setSuffix(".jsp");
return internalResourceViewResolver;
}
@Bean
public DataSource getDataSource() {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/fyt");
dataSource.setUsername("root");
dataSource.setPassword("");
return dataSource;
}
@Bean
public LocalSessionFactoryBean getSessionFactory() {
LocalSessionFactoryBean factoryBean = new LocalSessionFactoryBean();
factoryBean.setDataSource(getDataSource());
factoryBean.setHibernateProperties(getHibernateProperties());
factoryBean.setAnnotatedClasses(User.class);
return factoryBean;
}
private Properties getHibernateProperties() {
Properties properties = new Properties();
properties.put("hibernate.show_sql", "true");
properties.put("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");
return properties;
}
@Bean
public HibernateTransactionManager getTransactionManager() {
HibernateTransactionManager transactionManager = new HibernateTransactionManager();
transactionManager.setSessionFactory(getSessionFactory().getObject());
return transactionManager;
}
@Bean
public UserDao userDao() {
return new UserDaoImpl();
}
}
错误说,它不能将列表转换为httpMessges,所以我需要任何转换器或类似的东西吗?我错过了什么?
我认为您需要定制httpmessageconvertor来实现这一点
添加依赖项
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.5.0</version>
</dependency>
如果这不起作用,请尝试在配置文件中配置将Jackson映射到HttpMessage转换器的自定义配置。
对于有类似问题的人:
如果返回的类的对象没有Getter和Setter方法,则可能会发生这种情况。
例如:如果您有以下设置
public class Employee {
private int code;
private String name;
}
并以某种方式使用它:
@GetMapping("")
public ResponseEntity<Employee> getEmployee(@RequestParam("id") Integer id) {
Employee employee;
/* CODE. . .
*/
return new ResponseEntity<>(employee, HttpStatus.OK);
}
你可能会得到一个错误
org.springframework.http.converter.HttpMessageNotWritableException:未找到返回值类型:类com.dummy.springWeb. ExceptionHandler.员工的转换器
要解决这个问题,只需在employee类中添加getter和setter,它就能解决这个问题!
在控制器类级别提供@RestController,在方法级别提供@ResponseBody。确保所有与jackson相关的JAR都在类路径中。
在pom中添加与jackson相关的依赖项。xml
@RequestMapping(value = "/user",method = RequestMethod.GET)
@ResponseBody
public ResponseEntity<Map<String,Object>> handleRequest() throws Exception{
List<User> users = userService.list();
Map<String, Object> message = new HashMap<String, Object>();
message.put("severity", "info");
message.put("user", users);
message.put("summary", "Not successfully.");
message.put("code", 200);
Map<String, Object> json = new HashMap<String, Object>();
json.put("success", true);
json.put("message", message);
return new ResponseEntity<Map<String,Object>>(message,HttpStatus.CREATED);
}
jackson的pom依赖性示例。
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.8.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.1</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
问题内容: 有了这个代码 我得到以下异常 我的猜测是,由于缺少Jackson,该对象无法转换为JSON。我不明白为什么,因为我以为杰克逊内置弹簧靴。 然后我试图将Jackson添加到pom.xml中,但是我仍然遇到相同的错误 我是否需要更改任何Spring Boot属性才能使其正常工作? 谢谢 问题答案: 问题是Foo中的一个嵌套对象没有任何对象
根据这个Spring引导教程,我正在编写一个简单的RESTAPI。在我的本地开发机器(Ubuntu 15.04和Windows 8.1)上,一切都很有魅力。 我有一个旧的服务器,我想在其上部署我的服务。 开始日志正常,但只要我向endpoint发送请求,就会出现以下错误: 然后沿着stacktrace往下看: 整个堆栈跟踪都张贴在这里。 我查看了一些引用此错误的答案,但这些似乎不适用于我的问题,因
编辑:我想出了如何解决这个问题,并在下面的答案中发布了它。 我正在尝试创建一个API来查询数据库并返回两个值。我知道db查询可以工作,因为我可以看到它将值输出到控制台。但当我执行它时,我得到了这个错误:没有找到类型为:class hello的返回值的转换器。获取患者信息 这是我的控制器代码: 这是我的班级: 我肯定我做了一些根本错误的事情,因为我以前从未创建过api,但我只是没有迅速取得进展。任何
我有这门课: 这个问题: 但我有这个错误
我有两个微服务是通过外国沟通。一个微服务公开另一个正在调用的方法。该方法将日期作为参数。 这是方法的代码: == 另一个微服务使用这个外来类来调用这个方法: == 我的代码正在启动此异常: 未能转换“java”类型的值。lang.String“to required type”java。util。日期';嵌套异常为org。springframework。果心转换ConversionFailedEx
任务控制器 创造jsp 在控制器中,我用相同的错误(以及不同的格式,如“yyyy/MM/dd”)编写了以下内容 我还尝试在类中添加注释(以及使用不同的格式),但出现了相同的错误