diff --git a/spring-web/src/main/java/org/springframework/http/converter/json/AbstractJackson2HttpMessageConverter.java b/spring-web/src/main/java/org/springframework/http/converter/json/AbstractJackson2HttpMessageConverter.java index 503902aba27..be774d59f10 100644 --- a/spring-web/src/main/java/org/springframework/http/converter/json/AbstractJackson2HttpMessageConverter.java +++ b/spring-web/src/main/java/org/springframework/http/converter/json/AbstractJackson2HttpMessageConverter.java @@ -219,7 +219,7 @@ public abstract class AbstractJackson2HttpMessageConverter extends AbstractGener return readJavaType(javaType, inputMessage); } - private Object readJavaType(JavaType javaType, HttpInputMessage inputMessage) { + private Object readJavaType(JavaType javaType, HttpInputMessage inputMessage) throws IOException { try { if (inputMessage instanceof MappingJacksonInputMessage) { Class deserializationView = ((MappingJacksonInputMessage) inputMessage).getDeserializationView(); @@ -230,8 +230,8 @@ public abstract class AbstractJackson2HttpMessageConverter extends AbstractGener } return this.objectMapper.readValue(inputMessage.getBody(), javaType); } - catch (IOException ex) { - throw new HttpMessageNotReadableException("Could not read JSON document: " + ex.getMessage(), ex); + catch (JsonProcessingException ex) { + throw new HttpMessageNotReadableException("JSON parse error: " + ex.getOriginalMessage(), ex); } } @@ -283,7 +283,7 @@ public abstract class AbstractJackson2HttpMessageConverter extends AbstractGener } catch (JsonProcessingException ex) { - throw new HttpMessageNotWritableException("Could not write JSON document: " + ex.getMessage(), ex); + throw new HttpMessageNotWritableException("Could not write JSON: " + ex.getOriginalMessage(), ex); } } diff --git a/spring-web/src/main/java/org/springframework/http/converter/json/GsonHttpMessageConverter.java b/spring-web/src/main/java/org/springframework/http/converter/json/GsonHttpMessageConverter.java index 2ae751793ca..744230cacbe 100644 --- a/spring-web/src/main/java/org/springframework/http/converter/json/GsonHttpMessageConverter.java +++ b/spring-web/src/main/java/org/springframework/http/converter/json/GsonHttpMessageConverter.java @@ -161,7 +161,7 @@ public class GsonHttpMessageConverter extends AbstractGenericHttpMessageConverte return this.gson.fromJson(json, token.getType()); } catch (JsonParseException ex) { - throw new HttpMessageNotReadableException("Could not read JSON document: " + ex.getMessage(), ex); + throw new HttpMessageNotReadableException("JSON parse error: " + ex.getMessage(), ex); } } @@ -191,7 +191,7 @@ public class GsonHttpMessageConverter extends AbstractGenericHttpMessageConverte writer.close(); } catch (JsonIOException ex) { - throw new HttpMessageNotWritableException("Could not write JSON document: " + ex.getMessage(), ex); + throw new HttpMessageNotWritableException("Could not write JSON: " + ex.getMessage(), ex); } } diff --git a/spring-web/src/main/java/org/springframework/web/client/HttpMessageConverterExtractor.java b/spring-web/src/main/java/org/springframework/web/client/HttpMessageConverterExtractor.java index 2f03908c8ee..34e5dbd0a46 100644 --- a/spring-web/src/main/java/org/springframework/web/client/HttpMessageConverterExtractor.java +++ b/spring-web/src/main/java/org/springframework/web/client/HttpMessageConverterExtractor.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2015 the original author or authors. + * Copyright 2002-2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -86,7 +86,8 @@ public class HttpMessageConverterExtractor implements ResponseExtractor { for (HttpMessageConverter messageConverter : this.messageConverters) { if (messageConverter instanceof GenericHttpMessageConverter) { - GenericHttpMessageConverter genericMessageConverter = (GenericHttpMessageConverter) messageConverter; + GenericHttpMessageConverter genericMessageConverter = + (GenericHttpMessageConverter) messageConverter; if (genericMessageConverter.canRead(this.responseType, null, contentType)) { if (logger.isDebugEnabled()) { logger.debug("Reading [" + this.responseType + "] as \"" + diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/annotation/ResponseStatusExceptionResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/annotation/ResponseStatusExceptionResolver.java index b9b9f788e05..ce3590aedfc 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/annotation/ResponseStatusExceptionResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/annotation/ResponseStatusExceptionResolver.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2015 the original author or authors. + * Copyright 2002-2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -45,7 +45,7 @@ import org.springframework.web.servlet.handler.AbstractHandlerExceptionResolver; * @author Rossen Stoyanchev * @author Sam Brannen * @since 3.0 - * @see AnnotatedElementUtils#findMergedAnnotation + * @see ResponseStatus */ public class ResponseStatusExceptionResolver extends AbstractHandlerExceptionResolver implements MessageSourceAware { @@ -99,14 +99,14 @@ public class ResponseStatusExceptionResolver extends AbstractHandlerExceptionRes int statusCode = responseStatus.code().value(); String reason = responseStatus.reason(); - if (this.messageSource != null) { - reason = this.messageSource.getMessage(reason, null, reason, LocaleContextHolder.getLocale()); - } if (!StringUtils.hasLength(reason)) { response.sendError(statusCode); } else { - response.sendError(statusCode, reason); + String resolvedReason = (this.messageSource != null ? + this.messageSource.getMessage(reason, null, reason, LocaleContextHolder.getLocale()) : + reason); + response.sendError(statusCode, resolvedReason); } return new ModelAndView(); } diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/AbstractMessageConverterMethodArgumentResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/AbstractMessageConverterMethodArgumentResolver.java index eeaacfa3b99..30c84bca0c5 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/AbstractMessageConverterMethodArgumentResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/AbstractMessageConverterMethodArgumentResolver.java @@ -226,7 +226,7 @@ public abstract class AbstractMessageConverterMethodArgumentResolver implements } } catch (IOException ex) { - throw new HttpMessageNotReadableException("Could not read document: " + ex.getMessage(), ex); + throw new HttpMessageNotReadableException("I/O error while reading input message", ex); } if (body == NO_VALUE) { diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/AbstractMessageConverterMethodProcessor.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/AbstractMessageConverterMethodProcessor.java index 947ddc3ebb8..1ad3d5178a8 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/AbstractMessageConverterMethodProcessor.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/AbstractMessageConverterMethodProcessor.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2016 the original author or authors. + * Copyright 2002-2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -156,8 +156,8 @@ public abstract class AbstractMessageConverterMethodProcessor extends AbstractMe * @param inputMessage the input messages. Used to inspect the {@code Accept} header. * @param outputMessage the output message to write to * @throws IOException thrown in case of I/O errors - * @throws HttpMediaTypeNotAcceptableException thrown when the conditions indicated by {@code Accept} header on - * the request cannot be met by the message converters + * @throws HttpMediaTypeNotAcceptableException thrown when the conditions indicated + * by the {@code Accept} header on the request cannot be met by the message converters */ @SuppressWarnings("unchecked") protected void writeWithMessageConverters(T value, MethodParameter returnType,