Java 杰克逊 JSON 没有 POJO
Java Jackson JSON without POJOs
我目前正在将一个节点项目转换为 DW。节点项目当前将来自客户端的 JSON 存储为字符串,然后在客户端获取相同资源时将 return 存储为 application/JSON。这基本上是一个 Key/value 存储重置端点。
我想用 dropwizard 实现相同的功能,但我不想映射整个结构及其在 POJO 中的嵌套结构。有没有办法允许这样做?我只想使用密钥将 JSON 保存为数据库中的字符串,我根本不想在 java 应用程序中处理数据。
由于 API 要求我 return 一个对象,该对象应该是什么?这是我为 DW 提供的函数,如您所见,它期望 return 一个对象。
@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();
});
}
如果您不想创建自己的对象模型,那么 Jackson 有一个 JsonNode class。
如果您不想对数据做任何事情,您可以 return a String
并在您的方法中添加以下注释:
@Produces(MediaType.APPLICATION_JSON)
我目前正在将一个节点项目转换为 DW。节点项目当前将来自客户端的 JSON 存储为字符串,然后在客户端获取相同资源时将 return 存储为 application/JSON。这基本上是一个 Key/value 存储重置端点。
我想用 dropwizard 实现相同的功能,但我不想映射整个结构及其在 POJO 中的嵌套结构。有没有办法允许这样做?我只想使用密钥将 JSON 保存为数据库中的字符串,我根本不想在 java 应用程序中处理数据。
由于 API 要求我 return 一个对象,该对象应该是什么?这是我为 DW 提供的函数,如您所见,它期望 return 一个对象。
@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();
});
}
如果您不想创建自己的对象模型,那么 Jackson 有一个 JsonNode class。
如果您不想对数据做任何事情,您可以 return a String
并在您的方法中添加以下注释:
@Produces(MediaType.APPLICATION_JSON)