- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当端点调用失败时,我尝试返回不同的错误代码,并使用 HttpStatus
es 作为响应。
现在我正在测试端点定义:
@PostMapping("shredding_type/update")
public void updateShreddingType(
@RequestBody CdtUpdateReqDTO<ShredTypeGuiDTO> req
) throws IOException {
shreddingTypeCtrl.updateShreddingType(req.getCdt());
}
对于 DataIntegrityViolationException
和我的异常处理程序如下所示:
@ControllerAdvice
public class ErrorHandlingAspect {
@ExceptionHandler(Exception.class)
@ResponseBody
private ResponseStatusException handleException(Exception ex) {
OperationCtx ctx = OpCtxHolder.getCurrReqCtx();
ctx.setStatusCode(400);
HttpStatus status = HttpStatus.BAD_REQUEST;
if ("static GUI".equals(ctx.getSystemName()))
status = createCodeForGUI(ex);
return new ResponseStatusException(status);
}
private HttpStatus createCodeForGUI(Exception ex) {
HttpStatus status = HttpStatus.BAD_REQUEST;
if (ex instanceof DataIntegrityViolationException)
status = HttpStatus.CONFLICT;
return status;
}
}
并且我仍然在我的 Angular 应用程序中收到状态代码 500
的 HttpResponse
。
这是我违反该约束时得到的堆栈跟踪:
Caused by: org.hibernate.exception.ConstraintViolationException: could not execute statement
at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:112)
at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:42)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:113)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:99)
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:178)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3174)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3688)
at org.hibernate.action.internal.EntityInsertAction.execute(EntityInsertAction.java:90)
at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:604)
at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:478)
at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:356)
at org.hibernate.event.internal.DefaultAutoFlushEventListener.onAutoFlush(DefaultAutoFlushEventListener.java:50)
at org.hibernate.internal.SessionImpl.autoFlushIfRequired(SessionImpl.java:1414)
at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1500)
at org.hibernate.query.internal.AbstractProducedQuery.doList(AbstractProducedQuery.java:1537)
at org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1505)
at org.hibernate.query.Query.getResultList(Query.java:132)
at com.nws.vedica.dbs.dao.ShreddingTypeDAO.getAllTypes(ShreddingTypeDAO.java:51)
at com.nws.vedica.dbs.dao.ShreddingTypeDAO$$FastClassBySpringCGLIB$$460d869e.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:749)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:139)
... 121 common frames omitted
Caused by: org.postgresql.util.PSQLException: ERROR: duplicate key value violates unique constraint "shredding_type_shreddingtype_key"
Detail: Key (shreddingtype)=(N2) already exists.
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2433)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2178)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:306)
at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:441)
at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:365)
at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:155)
at org.postgresql.jdbc.PgPreparedStatement.executeUpdate(PgPreparedStatement.java:132)
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:175)
... 139 common frames omitted
2019-10-25_12:05:35.473 WARN o.s.w.s.m.m.a.ExceptionHandlerExceptionResolver - Failure in @ExceptionHandler private org.springframework.web.server.ResponseStatusException com.nws.vedica.aop.ErrorHandlingAspect.handleException(java.lang.Exception) sys$reqId: pYfaKFF; statusCode: 400; ip: 0:0:0:0:0:0:0:1; userId: static GUI; epUri: /api/KDMS/shredding_type/update; sys$systemName: static GUI
org.springframework.http.converter.HttpMessageConversionException: Type definition error: [simple type, class java.lang.Throwable]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Direct self-reference leading to cycle (through reference chain: org.springframework.web.server.ResponseStatusException["mostSpecificCause"])
at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.writeInternal(AbstractJackson2HttpMessageConverter.java:293)
at org.springframework.http.converter.AbstractGenericHttpMessageConverter.write(AbstractGenericHttpMessageConverter.java:103)
at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:290)
at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.handleReturnValue(RequestResponseBodyMethodProcessor.java:180)
at org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:82)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:119)
at org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver.doResolveHandlerMethodException(ExceptionHandlerExceptionResolver.java:408)
at org.springframework.web.servlet.handler.AbstractHandlerMethodExceptionResolver.doResolveException(AbstractHandlerMethodExceptionResolver.java:61)
at org.springframework.web.servlet.handler.AbstractHandlerExceptionResolver.resolveException(AbstractHandlerExceptionResolver.java:139)
at org.springframework.web.servlet.handler.HandlerExceptionResolverComposite.resolveException(HandlerExceptionResolverComposite.java:79)
at org.springframework.web.servlet.DispatcherServlet.processHandlerException(DispatcherServlet.java:1297)
at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1109)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1055)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:908)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:96)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.boot.actuate.web.trace.servlet.HttpTraceFilter.doFilterInternal(HttpTraceFilter.java:90)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:92)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:93)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.filterAndRecordMetrics(WebMvcMetricsFilter.java:117)
at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:106)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:200)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:834)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1415)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Direct self-reference leading to cycle (through reference chain: org.springframework.web.server.ResponseStatusException["mostSpecificCause"])
at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:77)
at com.fasterxml.jackson.databind.SerializerProvider.reportBadDefinition(SerializerProvider.java:1191)
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter._handleSelfReference(BeanPropertyWriter.java:944)
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:721)
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:719)
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:155)
at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider._serialize(DefaultSerializerProvider.java:480)
at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:319)
at com.fasterxml.jackson.databind.ObjectWriter$Prefetch.serialize(ObjectWriter.java:1396)
at com.fasterxml.jackson.databind.ObjectWriter.writeValue(ObjectWriter.java:913)
at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.writeInternal(AbstractJackson2HttpMessageConverter.java:287)
... 68 common frames omitted
注意@ExceptionHandler private org.springframework.web.server.ResponseStatusException..中的失败
部分。我认为这就是手动设置 HttpStatus 失败但无法弄清楚原因的原因。
这可能有什么问题吗?
最佳答案
您实际上并没有更改 HTTP 状态代码。您只需将一个放入 ResponseStatusException
中即可。但这并不会神奇地改变响应代码。
如果包含 HttpServletResponse
参数,则可以使用 response.setStatus(400)
设置代码。如果代码始终相同,则不需要respose,并且可以使用@ResponseStatus(HttpStatus.BAD_REQUEST)注释处理方法。
。
但是,在您的情况下,正确的响应代码是 500
,因为您的服务器执行了错误(5XX 代码),而不是客户端(4XX 代码)。
关于java - 手动设置 HttpStatus 时 @ExceptionHandler 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58556581/
我即将实现一个 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 代码。 我尝试返回
我是一名优秀的程序员,十分优秀!