SPR-7439 - JSON (jackson) @RequestBody marshalling throws awkward exception

This commit is contained in:
Arjen Poutsma
2010-08-11 08:16:12 +00:00
parent b90260f8d2
commit ac1d2d93d6
2 changed files with 27 additions and 5 deletions

View File

@@ -22,6 +22,8 @@ import java.util.List;
import org.codehaus.jackson.JsonEncoding;
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.type.TypeFactory;
import org.codehaus.jackson.type.JavaType;
@@ -45,7 +47,7 @@ import org.springframework.util.Assert;
*
* @author Arjen Poutsma
* @since 3.0
* @see org.springframework.web.servlet.view.json.BindingJacksonJsonView
* @see org.springframework.web.servlet.view.json.MappingJacksonJsonView
*/
public class MappingJacksonHttpMessageConverter extends AbstractHttpMessageConverter<Object> {
@@ -129,7 +131,12 @@ public class MappingJacksonHttpMessageConverter extends AbstractHttpMessageConve
protected Object readInternal(Class<?> clazz, HttpInputMessage inputMessage)
throws IOException, HttpMessageNotReadableException {
JavaType javaType = getJavaType(clazz);
return this.objectMapper.readValue(inputMessage.getBody(), javaType);
try {
return this.objectMapper.readValue(inputMessage.getBody(), javaType);
}
catch (JsonParseException ex) {
throw new HttpMessageNotReadableException("Could not read JSON: " + ex.getMessage(), ex);
}
}
@Override
@@ -139,10 +146,15 @@ public class MappingJacksonHttpMessageConverter extends AbstractHttpMessageConve
JsonEncoding encoding = getEncoding(outputMessage.getHeaders().getContentType());
JsonGenerator jsonGenerator =
this.objectMapper.getJsonFactory().createJsonGenerator(outputMessage.getBody(), encoding);
if (this.prefixJson) {
jsonGenerator.writeRaw("{} && ");
try {
if (this.prefixJson) {
jsonGenerator.writeRaw("{} && ");
}
this.objectMapper.writeValue(jsonGenerator, o);
}
catch (JsonGenerationException ex) {
throw new HttpMessageNotWritableException("Could not write JSON: " + ex.getMessage(), ex);
}
this.objectMapper.writeValue(jsonGenerator, o);
}
private JsonEncoding getEncoding(MediaType contentType) {