我在一个扩展JpaRepository的接口中有几个自定义查询。下面只是举例说明,可能会有错误,但不要担心)。
public interface MyRepo extends JpaRepository<SMark, String> {
@Transactional
@Modifying
@Query(value = "INSERT INTO my_table(id, col_1, col_2) " +
"values(:col_1, :col_2))", nativeQuery = true)
int insertRecord(@Param("col_1") String col_1, @Param("col_2") String col_2);
因此,我的问题是,除了成功的查询之外,我发现很难对int返回类型做任何有用的事情(它将返回1)。除了将值作为响应的一部分发送之外,是否还有其他方法可以对返回值执行任何有用的操作?换句话说,如果响应不是1,并且没有抛出异常,非1响应是否可以被转换为对用户来说信息更丰富的内容?
例如,我目前正在做以下工作,如果我对非1状态有信心,我希望改进这些工作:
if(status == 1) {
StatusResponse statusResponse = new StatusResponse("Successful Delete ", null);
return new ResponseEntity<>(statusResponse, HttpStatus.OK);
}
else {
StatusResponse statusResponse = new StatusResponse("Delete not successful (lacking details from response) ", null);
return new ResponseEntity<>(statusResponse, HttpStatus.NOT_ACCEPTABLE);
}
感谢任何回应。谢谢!
2条答案
按热度按时间7fhtutme1#
我不推荐使用返回类型作为有效操作的方法。我更喜欢有数据库级的约束,如唯一约束,检查约束或触发器检查插入/更新/删除。
不过,我们可以在接口内部使用默认方法并抛出数据库异常,在Spring中,您可以配置ExceptionHandler来 Package 异常并返回一些有效的错误代码。
t1rydlwq2#
由于这个方法的返回值表示修改对象的数量(在你的代码中,它只能是0或1),我将使用它来将它转换为更容易理解的响应。
最简单的情况是REST Api:
当方法返回1时,POST/PUT/PATCH调用成功(如果没有其他错误),您将返回
201 Created
,可能更像一个Location标头。当它返回0时,意味着没有对象被修改,因为它是一个插入,所以不应该发生这种情况,因此您将返回
500 InternalServerError
但我认为在您的情况下这是多余的,因为正如我所说的,这是一个插入,您只有这两个返回选项,我猜如果在插入过程中出现问题,您已经在 Spring Boot 时得到了一个异常,因此,当您调用该方法而没有得到错误时,我会说它成功了。
当然,您可以仔细检查以确保正确,甚至可以将其用于测试以强制执行预期的行为或其他操作。