티스토리 뷰
spring-data-mongodb를 이용하여 mongoDB와 연동하는 프로젝트를 만들고있다. CRUD API를 만들고 있는 도중에 insert하는 부분에서 이상한 것을 발견했다. { "id":"AA0001", "name":"T-shirts", "type":"clothing", "price":"5000" } 위와 같이 요청(POST)을 하여서 객체로 변환 후 insert 메소드로 저장을 했다. - mongoTemplate.insert(obj); 200 OK 메시지가 떨어졌고, DB에 저장이 되었지만... { "id":"AA0001", "_class":"com.test.model.product", "name":"T-shirts", "type":"clothing", "price":"5000" } 위와 같이 "_class"라는 필드가 함께 저장이 되었다ㅠㅠ http://stackoverflow.com/questions/6810488/spring-data-mongodb-mappingmongoconverter-remove-class/ 여기에 "_class"가 같이 추가되는 이유는 나와있는데... 잘 모르겠다 ㅠㅠ변경 전 (spring-context.xml)해결 방법
1 2 3 4 5 6 7 8 | <!-- mongo DB --> < mongo:mongo host = "localhost" port = "27017" > < mongo:db-factory id = "mongoDbFactory" dbname = "test" > < bean id = "mongoTemplate" class = "org.springframework.data.mongodb.core.MongoTemplate" > < constructor-arg ref = "mongoDbFactory" > </ constructor-arg ></ bean > </ mongo:db-factory ></ mongo:mongo > |
변경 후 (spring-context.xml)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <!-- mongo DB --> < mongo:mongo host = "localhost" port = "27017" > < mongo:db-factory id = "mongoDbFactory" dbname = "test" > < bean id = "mappingContext" class = "org.springframework.data.mongodb.core.mapping.MongoMappingContext" > < bean id = "defaultMongoTypeMapper" class = "org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper" > < constructor-arg name = "typeKey" > < null > </ null ></ constructor-arg > </ bean > < bean id = "mappingMongoConverter" class = "org.springframework.data.mongodb.core.convert.MappingMongoConverter" > < constructor-arg name = "mongoDbFactory" ref = "mongoDbFactory" > < constructor-arg name = "mappingContext" ref = "mappingContext" > < property name = "typeMapper" ref = "defaultMongoTypeMapper" > </ property ></ constructor-arg ></ constructor-arg ></ bean > < bean id = "mongoTemplate" class = "org.springframework.data.mongodb.core.MongoTemplate" > < constructor-arg ref = "mongoDbFactory" > < constructor-arg name = "mongoConverter" ref = "mappingMongoConverter" > </ constructor-arg ></ constructor-arg ></ bean > </ bean ></ mongo:db-factory ></ mongo:mongo > |
spring-context.xml의 mongoDB 설정에서 mongoTemplate을 생성하는 bean에 mappingMongoConverter를 추가해 주었다. mappingMongoConverter는 typeKey를 Null로 채운 typeMapper를 defaultMongoTypeMapper를 가진 클래스이다. 위와 같이 변경하니 더 이상 "_class" 필드는 추가되지 않았다.출처 - https://www.mkyong.com/mongodb/spring-data-mongodb-remove-_class-column/