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」而不是整個時間戳。
預先感謝您。
你在使用「打印」的反應如何?請分享您使用的代碼來查找並打印結果。 – helmy 2014-11-08 12:33:02
@helmy我已經添加了控制器方法以及dao方法來檢索文檔並將其作爲響應實體發送 – 2014-11-08 12:50:42