spring-data-jpa 我想传输一个状态代码,如果查询是成功的与Spring Boot ,我该怎么做?

kq4fsx7k  于 2022-11-10  发布在  Spring
关注(0)|答案(2)|浏览(143)

虽然这种情况对于现成的重写方法来说很容易,但我无法找到自己的查询方法。
这是我的资源库:

public interface CommentRepository extends JpaRepository<User , Long >{

     @Modifying
     @Transactional
     @Query( value="delete from users where first_name=:name" , nativeQuery=true )
     public void delete( String name );
}

这是我的控制器:

@RestController
@RequestMapping(path="/api/v1/users")
public class CommentController {

    @Autowired
    CommentRepository repository ;

    // Delete user

    @DeleteMapping(path="/delete")
    public void delete(@RequestParam String name) {

        repository.delete(name) ;
    }
}

例如,如果我删除了一个用户,我希望在查询成功的情况下将状态代码200传递给开发人员。
但是,如果查询失败,我希望传递不同的代码。

6pp0gazn

6pp0gazn1#

  • ResponseEntity代表整个HTTP响应:因此,我们可以使用它来完全配置HTTP响应。*

看看响应实体,使用它您将能够配置一切,包括状态代码。
https://www.baeldung.com/spring-response-entity

kpbpu008

kpbpu0082#

在休息控制器中,您可以执行以下操作:

@RestController
@RequestMapping(path="/api/v1/users")
public class CommentController {

    @Autowired
    CommentRepository repository ;

    // Delete user

    @DeleteMapping(path="/delete")
    public ResponseEntity<Void> delete(@RequestParam String name) {

        repository.delete(name);
        return ResponseEntity.ok().build();
    }
}

因为我不知道你的数据库结构,假设可以抛出一个SQLIntegrityConstraintViolationException,你可以创建一个服务层来处理这个异常。

@RequiredArgsConstructor
public class CommentServiceImpl implements CommentService {

   private final CommentRepository commentRepository;

   @Override
   public void deleteUsersByName(String name) {
     try {
         commentRepository.delete(name); //consider changing the repo method name 'delete' to be more contextual like 'deleteAllByName(String name)'
     } catch (Exception | SQLIntegrityConstraintViolationException e) //or other type, depending on your database structure
       throw new MyCustomException("my message: " + e); //create new RuntimeException with the name you prefer
   }

}

然后,您有许多方法可以行程新的例外状况。请在此阅读更多信息:https://www.baeldung.com/exception-handling-for-rest-with-spring
其中一种方法是将它放在@RestController类中

@ExceptionHandler({MyCustomException.class})
    public ResponseEntity<Void> handleConstrainViolationException() {
        return ResponseEntity.internalServerError(); //just an example
    }

在最后一部分,您可以处理服务层上抛出的异常,并从相应的异常处理程序返回相应的状态代码。可以考虑使用一个全局异常处理程序,就像上面关于Baeldung的文章中所述的那样。希望它会有一点帮助。

相关问题