2014-11-08 79 views
4

我正在面臨使用spring數據mongo模板從mongo db中檢索JSON響應的問題。不是檢索文檔的對象ID,而是使用時間戳記來提供響應。 以下是存儲在蒙戈分貝JSON有效載荷:Spring數據mongo模板返回時間戳而不是普通對象ID

{ 
    "_id" : ObjectId("5457d80a59b6460a50f6cef1"), 
    "menuId" : 123, 
    "menuItemId" : 723, 
    "lastUpdatedDate" : "2014-10-25T20:10:10+0000", 
    "menuItemJson" : { 

     .... 

    } 
} 

以下是我的JSON響應從蒙戈DB來:這是使用彈簧HTTP消息映射

{ 
    "id": { 
     "time": 1415043082000, 
     "date": 1415043082000, 
     "timeSecond": 1415043082, 
     "inc": 1358352113, 
     "machine": 1505117706, 
     "new": false, 
     "timestamp": 1415043082 
    }, 
    "menuId": 123, 
    "menuItemId": 723, 
    "lastUpdatedDate": "2014-10-25T20:10:10+0000", 
    "menuItemJson": { 

       ...... 

      } 
    } 

而以下是我的Java POJO類轉換器:

import org.bson.types.ObjectId; 
import org.springframework.data.annotation.Id; 
import org.springframework.data.mongodb.core.mapping.Document; 

    @Document(collection = "MenuItem") 
    public class MenuItemJsonCollection { 

     @Id 
     private ObjectId id; 
     private Integer menuId; 
     private Integer menuItemId; 

     .... 

     } 

以下是我的DAO方法來檢索集合:

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.data.mongodb.core.MongoTemplate; 
import org.springframework.stereotype.Repository; 
import org.springframework.data.mongodb.core.MongoTemplate; 
import org.springframework.data.mongodb.core.query.Criteria; 
import org.springframework.data.mongodb.core.query.Query; 

@Repository 
public class MenuDaoImpl implements MenuDao { 

    @Autowired 
    private MongoTemplate mongoMenuOrderingTemplate; 

    @Override 
     public MenuItemJsonCollection fetchMenuItemById(Long menuItemId) { 

      Query query = new Query(); 
      query.addCriteria(Criteria.where("id").is(menuItemId)); 

      return mongoMenuOrderingTemplate.findOne(query, MenuItemJsonCollection.class, "MenuDb"); 
     } 
} 

而且下面是在控制器中的其餘端點方法:

@Controller 
public class MenuOrderController { 

    @Autowired 
    private MenuOrderService menuOrderService; 
@RequestMapping(method = RequestMethod.GET, value = "/menuitems/{id}", produces = "application/json") 
    public ResponseEntity<MenuItemJsonCollection> getMenuItemByMenu(
      @PathVariable("id") String menuItemId, 
      @RequestParam(value = "lastupdatedatetime", required = false) String lastUpdateDateTimeString) { 

     Long menuItemID = null; 

     try{ 
      menuItemID = Long.parseLong(menuItemId); 
     }catch(Exception exe){ 
      throw new ClassifiedsBadRequestException(ErrorMapping.INVALID_PAYLOAD.getErrorCode()); 
     } 

     if (!ParamValidationUtil.validateNotNullOrEmptyParams(menuItemId)) { 
      throw new ClassifiedsBadRequestException(ErrorMapping.MISSING_FIELD.getErrorCode()); 
     } else{ 
      MenuItemJsonCollection menuItem = menuOrderService.fetchMenuItemById(menuItemID, lastUpdateDateTimeString); 

      if (menuItem == null) { 
       return new ResponseEntity<>(HttpStatus.NO_CONTENT); 
      } 

      return new ResponseEntity<>(menuItem, HttpStatus.OK); 

     } 
    } 
} 

我應該怎麼辦只打印ID,而不是發送帶有完整時間戳的反應如何?

即「id」:「5457d80a59b6460a50f6cef1」而不是整個時間戳。

預先感謝您。

+0

你在使用「打印」的反應如何?請分享您使用的代碼來查找並打印結果。 – helmy 2014-11-08 12:33:02

+0

@helmy我已經添加了控制器方法以及dao方法來檢索文檔並將其作爲響應實體發送 – 2014-11-08 12:50:42

回答

相關問題