0 0

SpringMVC no suitable creator method found to deserialize from JSON String5

rest-servlet.xml

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:p="http://www.springframework.org/schema/p"

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">

 

<!-- 自动扫描且只扫描@Controller -->

<context:component-scan base-package="cn.wsn.wot.api.web.controller" use-default-filters="false">

<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" />

</context:component-scan>

 

<mvc:annotation-driven />

 

<mvc:default-servlet-handler />

 

<!-- 定义首页 -->

<mvc:view-controller path="/" view-name="redirect:/home/index" />

 

<!-- 静态资源映射 -->

<mvc:resources mapping="/static/**" location="/WEB-INF/static/"/>

 

<!-- json转换器 -->

<bean id="jsonConverter" 

class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">

<property name="supportedMediaTypes" value="application/json" />

</bean>

 

<!-- 配置RestTemplate -->

<!--Http client Factory-->  

<bean id="httpClientFactory" class="org.springframework.http.client.HttpComponentsClientHttpRequestFactory">  

</bean>  

  

<!-- RestTemplate -->  

<bean id="restTemplate" class="org.springframework.web.client.RestTemplate">  

<constructor-arg ref="httpClientFactory"/>

<property name="messageConverters">

<list>

<ref bean="jsonConverter" />

</list>

</property>

</bean>

 

 

<!-- 默认的视图解析器 在上边的解析错误时使用 (默认使用html)- -->

<bean id="defaultViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"

p:order="1">

<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>

<property name="contentType" value="text/html"/>

<property name="prefix" value="/WEB-INF/views/" />

<property name="suffix" value=".jsp" />

</bean>

 

<!-- 支持上传文件 -->

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" />

 

 

</beans>

 

web.xml

 

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.5"

xmlns="http://java.sun.com/xml/ns/javaee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

 

<display-name>wot</display-name>

 

<!-- Spring配置文件开始  -->

<context-param>

<param-name>contextConfigLocation</param-name>

<param-value>classpath:/spring/spring-context.xml</param-value>

</context-param>

     

<listener>

<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

</listener>

<!-- Spring配置文件结束 -->

 

<!-- 可以使用RequestContextHolder.currentRequestAttributes() 获取到请求的attr -->

<listener>

<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>

</listener>

 

<!-- Spring 刷新Introspector防止内存泄露 -->

<listener>

<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>

</listener>

 

<!-- 设置servlet编码开始 -->

<filter>

<filter-name>CharacterEncodingFilter</filter-name>

<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

<init-param>

<param-name>encoding</param-name>

<param-value>UTF-8</param-value>

</init-param>

<init-param>

<param-name>forceEncoding</param-name>

<param-value>true</param-value>

</init-param>

</filter>

<filter-mapping>

<filter-name>CharacterEncodingFilter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

<!-- 设置servlet编码结束 -->

 

<!-- 让form支持PUT,DELETE等方法 -->

<filter>

<filter-name>HiddenHttpMethodFilter</filter-name>

<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>

</filter>

<filter-mapping>

<filter-name>HiddenHttpMethodFilter</filter-name>

<servlet-name>DispatcherServlet</servlet-name>

</filter-mapping>

 

<!-- 配置控制器 -->

<servlet>

<servlet-name>DispatcherServlet</servlet-name>

<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

<init-param>

<param-name>contextConfigLocation</param-name>

<param-value>classpath:/spring/rest-servlet.xml</param-value>

</init-param>

<load-on-startup>1</load-on-startup>

</servlet>

<servlet-mapping>

<servlet-name>DispatcherServlet</servlet-name>

<url-pattern>/</url-pattern>

</servlet-mapping>

 

<!--druid 监控-->

    <filter>

        <filter-name>DruidWebStatFilter</filter-name>

        <filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class>

        <init-param>

            <param-name>exclusions</param-name>

            <param-value>/static/*,*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*</param-value>

        </init-param>

        <init-param>

            <param-name>principalSessionName</param-name>

            <param-value>username</param-value>

        </init-param>

    </filter>

    <filter-mapping>

        <filter-name>DruidWebStatFilter</filter-name>

        <url-pattern>/*</url-pattern>

    </filter-mapping>

 

    <!-- druid监控 -->

    <servlet>

        <servlet-name>DruidStatView</servlet-name>

        <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>

    </servlet>

    <servlet-mapping>

        <servlet-name>DruidStatView</servlet-name>

        <url-pattern>/admin/monitor/druid/*</url-pattern>

    </servlet-mapping>

 

 

</web-app>

 

代码:

 

@RequestMapping(value = "/testCreateDevice")

public @ResponseBody String testCreateDevice() {

HttpHeaders requestHeaders = new HttpHeaders();

requestHeaders.set("WOT-ApiKey","d2427a2f-6524-40c9-bc63-cc58eb640988");

/*String body = "["

+"{\"serial_no\":\"abc123\","

   + "\"location\":\"320200\","

   + "\"longitude\":0.453,"

   + "\"latitude\":0.786},"

   +"{\"serial_no\":\"321cba\","

   + "\"location\":\"320201\","

   + "\"longitude\":0.454,"

   + "\"latitude\":0.787}"

   +"]";*/

String body = "[{\"serial_no\":\"abc123\",\"location\":\"320200\",\"longitude\":\"0.453\",\"latitude\":\"0.786\"},{\"serial_no\":\"321cba\",\"location\":\"320201\",\"longitude\":\"0.454\",\"latitude\":\"0.787\"}]";

HttpEntity<String> requestEntity = new HttpEntity<String>(body, requestHeaders);

String url = "http://localhost:8080/wot/products/{product_id}/devices";

Map<String, Object> uriVariables = new HashMap<String, Object>();

   uriVariables.put("product_id", "1001");

ResponseEntity<String> responseEntity = restTemplate.exchange(url,

HttpMethod.POST, requestEntity, String.class, uriVariables);

String result = "responseEntity.getBody():" + responseEntity.getBody() 

+ "responseEntity.getHeaders():" + responseEntity.getHeaders() 

+ "responseEntity.getStatusCode():" + responseEntity.getStatusCode();

return result;

}

 

@RequestMapping(produces = "application/json", 

method = RequestMethod.POST, 

value = "/{product_id}/devices")

public ResponseEntity<String> creatDevice(@RequestHeader("WOT-ApiKey") String WOT_ApiKey,

@RequestBody String body,

@PathVariable("product_id") String product_id) {

// 1.通过WOT_ApiKey鉴权

System.out.println("WOT_ApiKey:" + WOT_ApiKey);

// 2.鉴权通过之后把body转换成POJO

System.out.println("body:" + body);

List<Device> deviceList = JsonUtils.convertJson2List(body, Device.class);

// 3.持久化POJO,并返回所需要的结果

if(null != deviceList && deviceList.size() > 0) {

for(Device device : deviceList) {

if("abc123".equals(device.getSerialNo())) {

device.setDeviceId("1001201");

} else if("321cba".equals(device.getSerialNo())) {

device.setDeviceId("1001202");

}

}

String responseJson = "";

try {

responseJson = new ObjectMapper().writeValueAsString(deviceList);

} catch (JsonGenerationException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (JsonMappingException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return new ResponseEntity<String>(responseJson, HttpStatus.CREATED);

}

 

public static List convertJson2List(String json, Class clazz) {

ObjectMapper mapper = new ObjectMapper();

mapper.configure(DeserializationConfig.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);

JavaType valueType = mapper.getTypeFactory().constructParametricType(ArrayList.class, clazz);

try {

json = json.replace("\\", "");

return mapper.readValue(json, valueType);

} catch (JsonParseException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (JsonMappingException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

   return null;

}

新手,不知道是哪里没配好么?

2013年9月06日 15:58

1个答案 按时间排序 按投票排序

0 0

你有个bean没有默认的构造方法。

2013年9月10日 21:42

相关推荐

    springmvc加入json支持

    在Spring MVC框架中,JSON(JavaScript Object Notation)支持是必不可少的,因为它允许应用程序与客户端进行数据交换,尤其是在构建RESTful服务时。JSON格式轻便、易于读写,且被广泛接受为网络通信的标准数据格式...

    SpringMVC中后台转换json格式

    本文将详细介绍如何在SpringMVC中后台转换JSON格式,以解决406错误问题。 406错误通常发生在客户端发送了Accept头,表明它期望接收某种特定类型的数据,但服务器无法提供这种类型的数据。在Ajax请求中,这个Accept...

    springmvc对json支持

    在现代Web应用中,数据交换通常涉及JSON(JavaScript Object Notation)格式,因为JSON轻量级、易于解析,并且被大多数现代浏览器和服务器支持。Spring MVC 提供了对JSON的内置支持,使得开发人员可以轻松地在服务器...

    springmvc-json-lib.rar

    《SpringMVC与JSON库的整合详解》 在现代Web开发中,SpringMVC作为一款强大的MVC框架,被广泛应用于构建企业级的Java应用程序。而JSON作为一种轻量级的数据交换格式,因其易于人阅读和编写,同时也易于机器解析和...

    SpringMVC利用Ajax,JQuery交互Json

    @RequestMapping(value = "/getJSON", method = RequestMethod.GET) public @ResponseBody MyObject getJsonData() { // 创建MyObject实例并填充数据 MyObject obj = new MyObject(); // ... return obj; } ...

    springMVC 多视图配置(Jsp Freemarket Json)实例

    在这个"springMVC 多视图配置(Jsp Freemarket Json)实例"中,我们将探讨如何在 SpringMVC 中设置多种视图解析器来支持 Jsp、FreeMarker 和 Json 格式的响应。 **1. 视图解析器 (View Resolver)** 在 SpringMVC ...

    springmvc操作json数据所需的jar包

    在描述中提到的文件"springmvc-json"可能包含了Spring MVC与JSON交互所需的一些依赖,如Jackson库的jar文件。Jackson库由多个组件组成,主要包括: 1. **Jackson-core**: 这是Jackson库的基础模块,提供了基本的...

    SpringMVC的json依赖jar包

    SpringMVC支持JSON序列化和反序列化,允许服务器将Java对象转换为JSON字符串发送给客户端,以及将客户端发送的JSON数据转换回Java对象。这个过程中,Jackson库扮演了关键角色。 Jackson是Java领域中广泛使用的JSON...

    springmvc3+json参数传递后台接收json参数

    "springmvc3+json参数传递后台接收json参数"这个主题涉及到的是如何使用Spring MVC 3版本接收前端通过JSON格式发送的数据。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,因其易于人阅读和编写,...

    springMVC json格式转换demo

    本示例"springMVC json格式转换demo"将展示如何在Spring MVC应用中处理JSON格式的数据。 首先,确保你的项目依赖于`spring-web`模块,因为该模块包含了处理JSON所需的支持。在Maven的pom.xml文件中,添加以下依赖:...

    springMVC+json.zip_JSON_myeclipse_springmvc_数据传递

    在IT行业中,SpringMVC和JSON是两个非常重要的技术组件,尤其在开发Web应用程序时。SpringMVC作为Spring框架的一部分,提供了强大的模型-视图-控制器(MVC)架构支持,而JSON则是一种轻量级的数据交换格式,常用于...

    SpringMVC-json2.8.7

    SpringMVC 提供了对JSON处理的支持,使得服务器可以方便地将数据转换为JSON格式发送给客户端,或者接收客户端发送的JSON数据。在这个"SpringMVC-json2.8.7"的压缩包中,包含了处理JSON的三个关键组件,分别是: 1. ...

    springmvc,mybaitis json jar包

    springmvc,mybaitis json jar包Spring各jar包详解spring.jar 是包含有完整发布模块的单个jar 包。但是不包括mock.jar,aspects.jar, spring-portlet.jar, and spring-hibernate2.jar。 spring-src.zip就是所有的源...

    SpringMVC 开发json接口Demo(含数据库)

    SpringMVC 开发json接口Demo(含数据库、jar包)。包含:1、SpringMVC 开发json接口.docx;2、springmvc_project.rar;3、students_manage.sql

    SpringMVC-9 处理JSON数据

    在现代Web开发中,JSON(JavaScript Object Notation)已经成为一种广泛使用的数据交换格式,它轻量级、易于读写,并且被大多数编程语言所支持。Spring MVC,作为Spring框架的一部分,提供了一种优雅的方式来处理...

    springMVC+ajax+json

    Spring MVC、Ajax 和 JSON 是现代Web开发中的关键技术,它们共同构建了高效、动态的用户界面。下面将详细解释这三个技术及其在实际应用中的结合。 **Spring MVC** Spring MVC 是 Spring 框架的一部分,用于构建基于...

    springmvc加入json支持.zip

    在Spring MVC框架中,JSON(JavaScript Object Notation)是一种常用的数据交换格式,它轻量级、易读写,被广泛用于前后端数据交互。要使Spring MVC能够处理JSON请求和响应,我们需要集成一个JSON库,如Jackson。在...

    SpringMVC 使用JSON、XML视图

    在SpringMVC框架中,处理视图的呈现是至关重要的,尤其在当今Web应用程序中,JSON和XML格式的数据传输越来越普遍。SpringMVC为开发者提供了便捷的方式,将Java对象转换成JSON或XML视图,使得数据交换更加灵活。本文...

    springmvc中json转换的jar

    在Spring MVC框架中,JSON(JavaScript Object Notation)是一种常用的数据交换格式,它被广泛用于Web服务和客户端之间的通信。为了使Spring MVC能够处理JSON数据,我们需要依赖特定的库来进行对象到JSON字符串以及...

Global site tag (gtag.js) - Google Analytics