Browse Source

DATAMONGO-1695 - Make sure we read GridFs content type from the same field we write it to.

We now consistently store the content type of a file in _contentType in the metadata document. On the lookup side we still fall back to the deprecated file.getContentType().
pull/444/head
Oliver Gierke 9 years ago
parent
commit
4fa09d80db
  1. 2
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/gridfs/GridFsCriteria.java
  2. 8
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/gridfs/GridFsResource.java
  3. 2
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/gridfs/GridFsTemplate.java
  4. 13
      spring-data-mongodb/src/test/java/org/springframework/data/mongodb/gridfs/GridFsTemplateIntegrationTests.java

2
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/gridfs/GridFsCriteria.java

@ -69,6 +69,6 @@ public class GridFsCriteria extends Criteria { @@ -69,6 +69,6 @@ public class GridFsCriteria extends Criteria {
* @return
*/
public static GridFsCriteria whereContentType() {
return new GridFsCriteria("metadata.type");
return new GridFsCriteria("metadata.".concat(GridFsResource.CONTENT_TYPE_FIELD));
}
}

8
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/gridfs/GridFsResource.java

@ -33,6 +33,8 @@ import com.mongodb.gridfs.GridFSDBFile; @@ -33,6 +33,8 @@ import com.mongodb.gridfs.GridFSDBFile;
*/
public class GridFsResource extends InputStreamResource {
static final String CONTENT_TYPE_FIELD = "_contentType";
private final GridFSFile file;
/**
@ -91,7 +93,11 @@ public class GridFsResource extends InputStreamResource { @@ -91,7 +93,11 @@ public class GridFsResource extends InputStreamResource {
*
* @return
*/
@SuppressWarnings("deprecation")
public String getContentType() {
return file.getContentType();
String contentType = file.getMetadata().get(CONTENT_TYPE_FIELD, String.class);
return contentType != null ? contentType : file.getContentType();
}
}

2
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/gridfs/GridFsTemplate.java

@ -166,7 +166,7 @@ public class GridFsTemplate implements GridFsOperations, ResourcePatternResolver @@ -166,7 +166,7 @@ public class GridFsTemplate implements GridFsOperations, ResourcePatternResolver
Document mData = new Document();
if (StringUtils.hasText(contentType)) {
mData.put("type", contentType);
mData.put(GridFsResource.CONTENT_TYPE_FIELD, contentType);
}
if (metadata != null) {

13
spring-data-mongodb/src/test/java/org/springframework/data/mongodb/gridfs/GridFsTemplateIntegrationTests.java

@ -15,8 +15,10 @@ @@ -15,8 +15,10 @@
*/
package org.springframework.data.mongodb.gridfs;
import static org.assertj.core.api.Assertions.assertThat;
import static org.hamcrest.Matchers.*;
import static org.junit.Assert.*;
import static org.junit.Assert.assertThat;
import static org.springframework.data.mongodb.core.query.Criteria.*;
import static org.springframework.data.mongodb.core.query.Query.*;
import static org.springframework.data.mongodb.gridfs.GridFsCriteria.*;
@ -41,7 +43,6 @@ import org.springframework.test.context.ContextConfiguration; @@ -41,7 +43,6 @@ import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.mongodb.client.gridfs.GridFSFindIterable;
import com.mongodb.gridfs.GridFSFile;
/**
* Integration tests for {@link GridFsTemplate}.
@ -210,15 +211,15 @@ public class GridFsTemplateIntegrationTests { @@ -210,15 +211,15 @@ public class GridFsTemplateIntegrationTests {
assertEquals(((BsonObjectId) files.get(0).getId()).getValue(), reference);
}
private static void assertSame(GridFSFile left, GridFSFile right) {
@Test // DATAMONGO-1695
public void readsContentTypeCorrectly() throws IOException {
assertThat(left.getId(), is(right.getId()));
assertThat(left.getMD5(), is(right.getMD5()));
assertThat(left.getMetaData(), is(right.getMetaData()));
operations.store(resource.getInputStream(), "someName", "contentType");
assertThat(operations.getResource("someName").getContentType()).isEqualTo("contentType");
}
class Metadata {
String version;
}
}

Loading…
Cancel
Save