- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用spring开发rest服务很长时间了,到目前为止我返回http状态代码的方法是这样的:
@RequestMapping(value = "/sth")
public void name(HttpServletResponse response){
boolean lever = service.doSomethingAndReturnTrueIfSucceedOrFalseIfNot();
if(lever){
response.setStatus(HttpServletResponse.SC_OK);
}else{
response.setStatus(HttpServletResponse.SC_BAD_REQUEST); //NOT_FOUND or whatever
}
}
但我确信有更好的方法来做到这一点。我知道我们有 @ResponseStatus 注释,但它是..静态的,我的意思是它总是返回相同的代码 - 但如果出现问题怎么办?然后我不想将 200 OK 作为响应代码。
我找到了这样的解决方案:添加@ResponseStatus作为静态响应代码,但是当 Controller 中出现问题时,然后抛出一些自定义异常并将其捕获新的@ControllerAdvice类,并且还添加@ResponseStatus注释并返回正确的代码。
@RequestMapping(value = "/sth")
@ResponseStatus(HttpStatus.OK)
public void name(HttpServletResponse response) throws Exception{
boolean lever = service.doSomethingAndReturnTrueIfSucceedOrFalseIfNot();
if(!lever){
throw new SomethingWentWrongCustomException("Not okay..");
}
}
然后在类中捕获它,例如:
@ControllerAdvice
public class SomethingControllerAdvice{
@ExceptionHandler(value = SomethingWentWrongCustomException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
public void someName(){
}
}
这似乎是相当优雅的解决方案,但代码相当..罗嗦,不是吗?另一方面,如果我对整个应用程序采用这个并创建 @ControllerAdvice 类,那么它可能有意义你怎么看待这件事?还有其他更好的方法吗?
我希望这不是基于意见的问题,我也不希望这样。我只是不想使用反模式并从一开始就有良好的实践:)
最佳答案
返回 ResponseEntity
正如 @M-deinum 所写,这绝对是一个可行的方法。此外,您无需在 @ControllerAdvice
中定义每个异常的行为,只需使用适当的 @ResponseStatus
注释来注释您的异常类。
@ResponseStatus(HttpStatus.BAD_REQUEST)
class SomeException extends RuntimeException {
}
关于java - 返回 HttpStatus 代码的更好方法 Spring REST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27777518/
我即将实现一个 REST api。我想知道 HttpStatus.OK 和 HttpStatus.ACCEPTED 之间有什么区别: return new ResponseEntity(u, Http
我想处理服务器错误的特殊情况,即HttpStatus代码599。但是,这个代码没有在Spring内置的HttpStatus类中定义。对于 HttpStatus 类中定义的所有其他代码,我曾经通过以下代
我想返回,响应中的 555 状态代码。 我检查了spring框架的ResponseEntity类。 我可以看到所有构造函数仅接受 HttpStatus 枚举中的特定代码。这可以通过以下方式实现, re
我正在使用拦截器来转换我的响应。我想设置HttpStatus在里面,但我现在使用的代码不起作用。 import { CallHandler, ExecutionContext, NestInterce
假设我开发了一些 rest api。我有网络层( Controller )和服务层(模型)。在服务层使用 HttpStatus 代码抛出异常是好习惯吗? 有人会说,那个模型应该对web层一无所知,不应
我正在尝试使用 DownloadData 方法使用 RestSharp 下载文件(图像) var client = new RestClient(baseUrl); var request = new
我有一个 spring 集成 http 入站网关。我想在不同的使用情况下返回特定的 http 状态代码。 有没有办法在响应中指定 httpStatus ??? 我尝试使用 异常类型路由器,其中每个异常
我想测试当我调用这样的方法时是否会引发自定义异常: private MyObject queryDatabase(String request, String end){ HttpEntity
我有一个应用程序,我在其中使用 ResponseEntity 从我的 Controller 返回动态 HttpStatus 代码 return new ResponseEntity("Unrecogn
我在异常中使用 Spring 注释 @ResponseStatus @ResponseStatus(value=HttpStatus.UNAUTHORIZED) public class Unauth
我创建了一个 AppErrorController,它扩展了 Boot 的 ErrorController 以处理 status500 错误。示例: @Controller public class
我已经实现了一个符合 Snowflake's Asynchronous External Function. 的 API 在我们开发的系统中,我们使用 AWS API 网关、Lambda 函数和第三方
我使用spring开发rest服务很长时间了,到目前为止我返回http状态代码的方法是这样的: @RequestMapping(value = "/sth") public void
当端点调用失败时,我尝试返回不同的错误代码,并使用 HttpStatuses 作为响应。 现在我正在测试端点定义: @PostMapping("shredding_type/update")
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 5 年前。 Improve
我正在使用 Spring Boot 构建应用程序。此应用程序是分布式的,这意味着我有多个相互调用的 API。 我的一项底层服务与数据库交互并响应请求的数据。如果发出对不存在的 ID 的请求,我将使用
这个问题在这里已经有了答案: WEBrick: RequestURITooLarge: should I update or use a different server? (3 个答案) 关闭 5
我正在使用 spring MVC 创建 Rest Web 服务。并希望发送 213 代码状态作为响应。但此代码不存在于类 org.springframework.http.HttpStatus 中,并
使用org.apache.http与 org.apache.httpcomponents httpclient 4.5.2 描述端点上的 swagger 配置(不过,这不仅仅是库
我有一个 spring mvc Controller ,它生成一个“application/pdf”来下载生成的 pdf。我想始终返回 pdf,并根据某些条件返回不同的 HTTP 代码。 我尝试返回
我是一名优秀的程序员,十分优秀!