Reasonable defaults for MultipartHttpMessageWriter

MultipartHttpMessageWriter is now configured to handle JSON and XML
out of the box.
This commit is contained in:
Rossen Stoyanchev
2017-05-27 15:01:20 -04:00
parent 03b344b579
commit 1383ad5f91
3 changed files with 30 additions and 19 deletions

View File

@@ -65,6 +65,7 @@ abstract class AbstractCodecConfigurer implements CodecConfigurer {
protected AbstractCodecConfigurer(AbstractDefaultCodecs defaultCodecs) {
Assert.notNull(defaultCodecs, "'defaultCodecs' is required.");
this.defaultCodecs = defaultCodecs;
this.defaultCodecs.setCustomCodecs(this.customCodecs);
}
@@ -112,7 +113,7 @@ abstract class AbstractCodecConfigurer implements CodecConfigurer {
}
abstract static class AbstractDefaultCodecs implements DefaultCodecs {
abstract protected static class AbstractDefaultCodecs implements DefaultCodecs {
private boolean registerDefaults = true;
@@ -120,6 +121,8 @@ abstract class AbstractCodecConfigurer implements CodecConfigurer {
private Jackson2JsonEncoder jackson2Encoder;
private DefaultCustomCodecs customCodecs;
public void setRegisterDefaults(boolean registerDefaults) {
this.registerDefaults = registerDefaults;
@@ -129,6 +132,17 @@ abstract class AbstractCodecConfigurer implements CodecConfigurer {
return this.registerDefaults;
}
/**
* Access to custom codecs for sub-classes, e.g. for multipart writers.
*/
public void setCustomCodecs(DefaultCustomCodecs customCodecs) {
this.customCodecs = customCodecs;
}
public DefaultCustomCodecs getCustomCodecs() {
return this.customCodecs;
}
@Override
public void jackson2Decoder(Jackson2JsonDecoder decoder) {
this.jackson2Decoder = decoder;
@@ -227,7 +241,7 @@ abstract class AbstractCodecConfigurer implements CodecConfigurer {
}
private static class DefaultCustomCodecs implements CustomCodecs {
protected static class DefaultCustomCodecs implements CustomCodecs {
private final List<HttpMessageReader<?>> typedReaders = new ArrayList<>();
private final List<HttpMessageWriter<?>> typedWriters = new ArrayList<>();

View File

@@ -100,9 +100,19 @@ class DefaultClientCodecConfigurer extends AbstractCodecConfigurer implements Cl
}
private MultipartHttpMessageWriter getMultipartHttpMessageWriter() {
return this.multipartCodecs != null ?
new MultipartHttpMessageWriter(this.multipartCodecs.getWriters()) :
new MultipartHttpMessageWriter();
List<HttpMessageWriter<?>> partWriters;
if (this.multipartCodecs != null) {
partWriters = this.multipartCodecs.getWriters();
}
else {
partWriters = new ArrayList<>();
partWriters.addAll(super.getTypedWriters());
partWriters.addAll(getCustomCodecs().getTypedWriters());
partWriters.addAll(super.getObjectWriters());
partWriters.addAll(getCustomCodecs().getObjectWriters());
partWriters.addAll(super.getCatchAllWriters());
}
return new MultipartHttpMessageWriter(partWriters);
}
}