我正在为我们的一个数据模型(Oracle)的RESTful API工作,并且正在使用JAX-RS(Java6注释)实现它。我希望得到一些指导的问题是如何在成功完成PUT方法时返回适当的HTTP状态方法(对于INSERT为200;对于UPDATE为200或204),该方法使用幂等MERGE查询实现到数据库。如何为MERGE语句发送适当的HTTP状态?
目前我的Java逻辑类似于以下
int affectedRows = customDataBasePackage.executeUpdatePreparedStatement(insertSql, insertParams);
if(affectedRows < 1) {
if(checkRowsSql == null || checkRowsParams == null) {
return Response.status(412).build();
} else {
return this.executeSELECTreturnJSON(checkRowsSql, checkRowsParams, 412, 409);
}
} else {
return Response.status(201).build();
}
的executeUpdatePreparedStatement(字符串,对象[])方法简单地从在SQL过去了,参数映射得到一个PreparedStatement,然后执行PreparedStatement.executeUpdated ();
此外,我以这种方式实现PUT方法的原因是因为此特定表的id列是用户生成的,因此INSERT和UPDATE方法都必须是幂等的。这是我的理解,HTTP标准使用PUT进行幂等运算,POST使用非幂等创建。
感谢您花时间帮忙!
合并可以在同一语句(不只是一个或其他)中插入和更新行,因此如果没有错误,那么可能是200。 – tbone 2012-02-03 16:48:43
这就是我一直倾向于的,但如果有一些方法仍然使用MERGE语句,同时保持HTTP标准并将相关的200,201或204状态发回给用户,那将会很好。 – hypno7oad 2012-02-03 17:13:13