没有POJO的Java Jackson JSON

时间:2016-02-17 21:38:48

标签: java json jackson dropwizard

我目前正在将节点项目转换为DW。节点项目当前将JSON作为字符串从客户端存储,然后在客户端获取相同资源时返回application / JSON。这基本上是键/值存储重置端点。

我想用dropwizard实现相同的功能,但我不想在POJO中映射整个结构及其嵌套结构。有没有办法允许这个?我只是想用密钥将数据库中的JSON保存为数据库,我不想在java应用程序中使用数据。

由于API要求我返回一个对象,该对象应该是什么?这是我对DW的功能,因为你可以看到它希望返回一个对象。

@GET
@UnitOfWork
@Timed
@ApiOperation(value="Find value by ID", notes="Get a value object from the DAO using ID as the sole criterion")
@ApiResponses(value={
        @ApiResponse(code=400, message="Invalid ID"),
        @ApiResponse(code=404, message="No object found by specified ID")
})
public SomeJavaOjbectMustGoHere getSample(
            @ApiParam(value="id of object to get", required=true)
            @QueryParam("id")
            Long id
        ) throws WebApplicationException {

    SomeJavaOjbectMustGoHere returned = dao.get(id);
    if (returned == null) throw new WebApplicationException(Response.Status.NOT_FOUND);
    else return returned;
}

以下是节点的大部分代码:



module.exports = function (server) {

  function createResponse(req, res, next) {

   var key = req.params.name;
   console.log("Creating Response for key: '" + req.params.name + "'");

    // ...some validation...
    if (..blah..) { 
      // fail out.
      res.send(403, "response can not be saved without a valid key and structure.");
      return next();
    }

    
    var data = JSON.stringify(req.body);
    // ... store the stuff in the db...

    res.send(201, "Saved");
    return next();
  }

  function getResponse(req, res, next) {
    try {
      var payload = {};
      
      // ... get the data matching the key...

      res.header("Content-Type", "application/json");
      res.send(200, JSON.parse(payload.toString()));
    }
    catch(err) {
      console.log('Data not found.' + err);
      res.send(200,
        {
          "id": Math.random().toString(36).substr(3, 8),
          // ... default structure ...
        });
    }
    return next();
  }

  function send(req, res, next) {
    res.send('response ' + req.params.name);
    return next();
  }

  server.post('/response/:name', createResponse);
  server.put('/response', send);
  server.get('/response/:name', getResponse);
  server.head('/response/:name', send);
  server.del('/response/:name', function rm(req, res, next) {
    res.send(204);
    return next();
  });

}




1 个答案:

答案 0 :(得分:1)

如果您不想创建自己的对象模型,那么杰克逊有一个JsonNode class

如果您不想对数据执行任何操作,只需返回String并将以下注释添加到方法中:

@Produces(MediaType.APPLICATION_JSON)