Java Spring数据mongo模板返回时间戳而不是普通对象id

Java Spring数据mongo模板返回时间戳而不是普通对象id,java,mongodb,spring-data,spring-data-mongodb,nosql,Java,Mongodb,Spring Data,Spring Data Mongodb,Nosql,我在使用SpringDataMongo模板从MongoDB检索JSON响应时面临问题。响应不是检索文档的对象id,而是带有时间戳。 以下是存储在mongo db中的JSON负载: { "_id" : ObjectId("5457d80a59b6460a50f6cef1"), "menuId" : 123, "menuItemId" : 723, "lastUpdatedDate" : "2014-10-25T20:10:10+0000", "menuIte

我在使用SpringDataMongo模板从MongoDB检索JSON响应时面临问题。响应不是检索文档的对象id,而是带有时间戳。 以下是存储在mongo db中的JSON负载:

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

       ....

     }
}
 {
    "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": {

                 ......

            }
     }
以下是来自mongo db的json响应:

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

       ....

     }
}
 {
    "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类,它是使用spring http消息转换器映射的:

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;

        ....

      }
以下是检索集合的my 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");
        }
 }  
以下是控制器中的rest端点方法:

@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);

        }
    }
}
@控制器
公共类菜单控制器{
@自动连线
私有菜单服务菜单服务;
@RequestMapping(method=RequestMethod.GET,value=“/menuitems/{id}”,products=“application/json”)
公共响应getMenuItemByMenu(
@PathVariable(“id”)字符串菜单项id,
@RequestParam(value=“lastupdatedatetime”,required=false)字符串lastUpdateDateTimeString){
Long menuItemID=null;
试一试{
menuItemID=Long.parseLong(menuItemID);
}捕获(异常exe){
抛出新的ClassifiedsBadRequestException(ErrorMapping.INVALID_PAYLOAD.getErrorCode());
}
如果(!ParamValidationUtil.validateNotNullOrEmptyParams(menuItemId)){
抛出新的ClassifiedsBadRequestException(ErrorMapping.MISSING_FIELD.getErrorCode());
}否则{
MenuItemJsonCollection menuItem=menuOrderService.fetchMenuItemById(menuItemID,lastUpdateDateTimeString);
if(menuItem==null){
返回新的响应属性(HttpStatus.NO_内容);
} 
返回新的响应状态(menuItem,HttpStatus.OK);
}
}
}
我应该怎么做才能只打印id而不是发送带有完整时间戳的响应

i、 e“id”:“5457d80a59b6460a50f6cef1”而不是整个时间戳


提前感谢。

这里的问题是JSON响应的Jackson序列化。这些线程演示了如何连接自定义序列化程序:


您使用什么“打印”响应?请共享用于查找和打印结果的代码。@helmy我添加了控制器方法和dao方法来检索文档并将其作为响应实体发送