Server:
01 | @RequestMapping (value = { "/hygiene/{phone}" }, method = {RequestMethod.POST },produces= "application/json" ) |
03 | public PhoneResult hygiene( @PathVariable ( "phone" )String phoneObject) { |
04 | PhoneResult result = new PhoneResult(); |
06 | ObjectMapper mapper = new ObjectMapper(); |
07 | Phone phone = mapper.readValue(phoneObject, Phone. class ); |
08 | result.setRawPhoneNumber(phone.getPhoneNumber()); |
09 | result.setFormat( "4+4+4" ); |
10 | result.setCleanInternationalNumber( "86 0513 23234442" ); |
11 | result.setCleanNationalNumber( "0513 23423423" ); |
12 | result.setPreferredPresentation( "513 234234234" ); |
13 | } catch (Exception e) { |
15 | result.setCleanInternationalNumber( "error" ); |
Client:
1 | MultiValueMap<String,Object> dataMap2 = new LinkedMultiValueMap<String, Object>(); |
3 | p.setPhoneNumber( "0513 23423423" ); |
4 | dataMap2.add( "phone" , JsonUtil.javaToJson(p)); |
5 | HttpEntity<Object> entity2 = new HttpEntity<Object>(dataMap2); |
1 | public static String javaToJson(Object o) throws Exception{ |
2 | StringWriter writer = new StringWriter(); |
3 | ObjectMapper mapper = new ObjectMapper(); |
4 | mapper.writeValue(writer, o); |
5 | String json=writer.toString(); |
遇到的异常: server端转化json失败:
1 | org.codehaus.jackson.map.JsonMappingException: Can not deserialize instance of com.pojo.Phone out of START_ARRAY token |
2 | at [Source: java.io.StringReader @55afbf49 ; line: 1 , column: 1 ] |
3 | at org.codehaus.jackson.map.JsonMappingException.from(JsonMappingException.java: 163 ) |
4 | at org.codehaus.jackson.map.deser.StdDeserializationContext.mappingException(StdDeserializationContext.java: 198 ) |
5 | at org.codehaus.jackson.map.deser.BeanDeserializer.deserializeUsingCreator(BeanDeserializer.java: 565 ) |
6 | at org.codehaus.jackson.map.deser.BeanDeserializer.deserialize(BeanDeserializer.java: 365 ) |
7 | at org.codehaus.jackson.map.ObjectMapper._readMapAndClose(ObjectMapper.java: 2391 ) |
8 | at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java: 1591 ) |
9 | at com.acxiom.rest.controller.HelloWorldController.hygiene(HelloWorldController.java: 52 ) |
Debug了一下程序,发现传进来的json字符串是数组格式的:
[{"phoneNumber":"0513 XXXXX","phoneType":"1","countryCode":"1","geoOption":"1","defaultOption":"1","geoLat":"1","geoLong":"1"}]
果断修改了Server端代码:
1 | ObjectMapper mapper = new ObjectMapper(); |
2 | Phone phone = mapper.readValue(phoneObject, Phone[]. class )[ 0 ]; |
问题解决。