Spring 中的 Jackson Object Mapper 不工作
Jackson Object Mapper in Spring not working
我有 Spring MVC 应用程序,它从 Java 脚本前端接收 JSON POSTed。
使用 Jackson 2,自定义对象映射器仅将 ACCEPT_SINGLE_VALUE_AS_ARRAY 设置为 true。
下面是我的代码片段。
启用 MVC Java 配置:
@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(0, jackson2Converter());
}
@Primary
@Bean
public MappingJackson2HttpMessageConverter jackson2Converter() {
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
converter.setObjectMapper(objectMapper());
return converter;
}
@Primary
@Bean
public ObjectMapper objectMapper() {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
return objectMapper;
}
}
Controller.java:
@RequestMapping(value = "home", method = RequestMethod.POST, consumes = "application/json")
@ResponseBody
public String submitForm(@RequestBody final Shipment shipment) {
...
}
POJO:
class Shipment implements Serializable {
private String dstState;
private List<String> dstCities;
// getters, setters and default constructor
}
Ajax POST 来电:
$.ajax({ url: ".../home", type: "POST", data: JSON.stringify(("#shipForm").serializeArray()), contentType: "application/json", dataType: 'json', ....
JSON 发布对象:mydata: {"dstState":"NV" ,"dstCities":"Las Vegas"}
收到POST后,出现错误:
Could not read JSON: Can not deserialize instance of java.util.ArrayList out of VALUE_STRING token
at [Source: java.io.PushbackInputStream@44733b90; line: 1, column: 90] (through reference chain: com.*.Shipment["dstCities"]); nested exception is com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.util.ArrayList out of VALUE_STRING token
请指出我在这里遗漏的任何内容
您输入的json数据格式不正确
Shipment
Json表示:
Shipment
是 Json 对象
String dstState
也是 Json 对象
List<String> dstCities
是 Json 数组
更正 Json 您的 Shipment
class 的数据格式类似于
[{"dstState":"NV" , "dstCities": ["Las Vegas"]}]
或
[{"dstState":"NV" , "dstCities": ["Las Vegas", "Las Not Vegas"]}]
我有 Spring MVC 应用程序,它从 Java 脚本前端接收 JSON POSTed。 使用 Jackson 2,自定义对象映射器仅将 ACCEPT_SINGLE_VALUE_AS_ARRAY 设置为 true。 下面是我的代码片段。
启用 MVC Java 配置:
@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(0, jackson2Converter());
}
@Primary
@Bean
public MappingJackson2HttpMessageConverter jackson2Converter() {
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
converter.setObjectMapper(objectMapper());
return converter;
}
@Primary
@Bean
public ObjectMapper objectMapper() {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
return objectMapper;
}
}
Controller.java:
@RequestMapping(value = "home", method = RequestMethod.POST, consumes = "application/json")
@ResponseBody
public String submitForm(@RequestBody final Shipment shipment) {
...
}
POJO:
class Shipment implements Serializable {
private String dstState;
private List<String> dstCities;
// getters, setters and default constructor
}
Ajax POST 来电:
$.ajax({ url: ".../home", type: "POST", data: JSON.stringify(("#shipForm").serializeArray()), contentType: "application/json", dataType: 'json', ....
JSON 发布对象:mydata: {"dstState":"NV" ,"dstCities":"Las Vegas"}
收到POST后,出现错误:
Could not read JSON: Can not deserialize instance of java.util.ArrayList out of VALUE_STRING token
at [Source: java.io.PushbackInputStream@44733b90; line: 1, column: 90] (through reference chain: com.*.Shipment["dstCities"]); nested exception is com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.util.ArrayList out of VALUE_STRING token
请指出我在这里遗漏的任何内容
您输入的json数据格式不正确
Shipment
Json表示:
Shipment
是 Json 对象String dstState
也是 Json 对象List<String> dstCities
是 Json 数组
更正 Json 您的 Shipment
class 的数据格式类似于
[{"dstState":"NV" , "dstCities": ["Las Vegas"]}]
或
[{"dstState":"NV" , "dstCities": ["Las Vegas", "Las Not Vegas"]}]