2016-05-04 14 views
0

Ich versuche einen benutzerdefinierten HTTP-Statuscode (450) zu verwenden, aber ich erhalte den Fehler "org.springframework.http.HttpStatus hat keine Aufzählungskonstante '450' definiert" . Ich habe versucht, die anderen Threads zu durchsuchen, aber ich konnte keine passende Antwort auf meine Situation finden. Jede Hilfe wird sehr geschätzt. Vielen Dank!Benutzerdefinierter HTTP-Statuscode anders als registrierter Statuscode

Hier finden Sie meinen Code:

<http:inbound-gateway supported-methods="POST" 
     request-channel="headerEnricher" 
     error-channel="errorHandlerRouterChannel" 
     reply-channel="responseChannel" header-mapper="headerMapper" 
     path="/testApi/1.0" request-payload-type="java.lang.String" /> 

Fehler-Handler-Methode:

private Message<String> createErrorResponse() { 
     Map<String, String> respHeader = new HashMap<String, String>(); 
     respHeader.put(HttpHeaders.STATUS_CODE, "450"); 
     return MessageBuilder.withPayload("Validation Error") 
       .copyHeaders(respHeader).build(); 
} 

Fehler Ausnahme:

HTTP Status 500 - Request processing failed; nested exception is java.lang.IllegalArgumentException: No matching constant for [450] 
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.IllegalArgumentException: No matching constant for [450] 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:894) 
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:595) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:668) 
root cause: java.lang.IllegalArgumentException: No matching constant for [450] 
    org.springframework.http.HttpStatus.valueOf(HttpStatus.java:426) 
    org.springframework.integration.http.inbound.HttpRequestHandlingEndpointSupport.resolveHttpStatusFromHeaders(HttpRequestHandlingEndpointSupport.java:549) 
    org.springframework.integration.http.inbound.HttpRequestHandlingEndpointSupport.setupResponseAndConvertReply(HttpRequestHandlingEndpointSupport.java:443) 
    org.springframework.integration.http.inbound.HttpRequestHandlingMessagingGateway.handleRequest(HttpRequestHandlingMessagingGateway.java:103) 
    org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:49) 
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923) 
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852) 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882) 
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:595) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:668) 
+0

In welcher Situation ist das? Ich würde neigen dazu, einen benutzerdefinierten HTTP-Status-Code in den meisten Fällen zu vermeiden, die ich mir vorstellen kann. – Michael

+1

siehe hier: http://stackoverflow.com/questions/22150176/custom-http-code-with-spring-mvc – aldanux

+0

Hallo Aldanux, danke für die Antwort. Aber bitte sehen Sie sich meinen Code an. Bitte lassen Sie mich wissen, wie ich mit dieser Situation umgehen soll. Vielen Dank! –

Antwort

1

a) Ich würde behaupten, dass Frühling Buggy ist, wenn es nur unterstützt eine fest verdrahtete Gruppe von Statuscodes; Diese sind ein Erweiterungspunkt in HTTP und daher ist der Statuscode offen (bis der Bereich 100..599 voll ist).

b) In Bezug auf Ihren Anwendungsfall - vielleicht könnten Sie stattdessen einfach den Statuscode 422 verwenden (https://greenbytes.de/tech/webdav/rfc4918.html#STATUS_422)?