Skip to content

Commit

Permalink
Merge branch '5.2.x' into master
Browse files Browse the repository at this point in the history
  • Loading branch information
rstoyanchev committed Sep 14, 2020
2 parents 74f64c4 + 16d125c commit bd27781
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,8 @@ public final class StringDecoder extends AbstractDataBufferDecoder<String> {

private final boolean stripDelimiter;

private Charset defaultCharset = DEFAULT_CHARSET;

private final ConcurrentMap<Charset, byte[][]> delimitersCache = new ConcurrentHashMap<>();


Expand All @@ -83,6 +85,24 @@ private StringDecoder(List<String> delimiters, boolean stripDelimiter, MimeType.
}


/**
* Set the default character set to fall back on if the MimeType does not specify any.
* <p>By default this is {@code UTF-8}.
* @param defaultCharset the charset to fall back on
* @since 5.2.9
*/
public void setDefaultCharset(Charset defaultCharset) {
this.defaultCharset = defaultCharset;
}

/**
* Return the configured {@link #setDefaultCharset(Charset) defaultCharset}.
* @since 5.2.9
*/
public Charset getDefaultCharset() {
return this.defaultCharset;
}

@Override
public boolean canDecode(ResolvableType elementType, @Nullable MimeType mimeType) {
return (elementType.resolve() == String.class && super.canDecode(elementType, mimeType));
Expand Down Expand Up @@ -136,12 +156,12 @@ public String decode(DataBuffer dataBuffer, ResolvableType elementType,
return value;
}

private static Charset getCharset(@Nullable MimeType mimeType) {
private Charset getCharset(@Nullable MimeType mimeType) {
if (mimeType != null && mimeType.getCharset() != null) {
return mimeType.getCharset();
}
else {
return DEFAULT_CHARSET;
return getDefaultCharset();
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -411,7 +411,7 @@ private void addContentDispositionHeader(ServletServerHttpRequest request, Servl

try {
int status = response.getServletResponse().getStatus();
if (status < 200 || status > 299) {
if (status < 200 || (status > 299 && status < 400)) {
return;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -400,6 +400,25 @@ public void addContentDispositionHeader() throws Exception {
this.servletRequest.removeAttribute(WebUtils.FORWARD_REQUEST_URI_ATTRIBUTE);
}

@Test
public void addContentDispositionHeaderToErrorResponse() throws Exception {
ContentNegotiationManagerFactoryBean factory = new ContentNegotiationManagerFactoryBean();
factory.addMediaType("pdf", new MediaType("application", "pdf"));
factory.afterPropertiesSet();

RequestResponseBodyMethodProcessor processor = new RequestResponseBodyMethodProcessor(
Collections.singletonList(new StringHttpMessageConverter()),
factory.getObject());

this.servletRequest.setRequestURI("/hello.dataless");
this.servletResponse.setStatus(400);

processor.handleReturnValue("body", this.returnTypeString, this.container, this.request);

String header = servletResponse.getHeader("Content-Disposition");
assertThat(header).isEqualTo("inline;filename=f.txt");
}

@Test
public void supportsReturnTypeResponseBodyOnType() throws Exception {
Method method = ResponseBodyController.class.getMethod("handle");
Expand Down Expand Up @@ -724,10 +743,14 @@ private void assertContentDisposition(RequestResponseBodyMethodProcessor process

String header = servletResponse.getHeader("Content-Disposition");
if (expectContentDisposition) {
assertThat(header).as("Expected 'Content-Disposition' header. Use case: '" + comment + "'").isEqualTo("inline;filename=f.txt");
assertThat(header)
.as("Expected 'Content-Disposition' header. Use case: '" + comment + "'")
.isEqualTo("inline;filename=f.txt");
}
else {
assertThat(header).as("Did not expect 'Content-Disposition' header. Use case: '" + comment + "'").isNull();
assertThat(header)
.as("Did not expect 'Content-Disposition' header. Use case: '" + comment + "'")
.isNull();
}

this.servletRequest = new MockHttpServletRequest();
Expand Down

0 comments on commit bd27781

Please sign in to comment.