/刷新端点被添加,暴露,我可以直接调用,但它不能通过HTTP方法头获得?
2017-02-21 15:00:08.913 INFO [ - ,,,] 4597 --- [main] osbaemvc.EndpointHandlerMapping:映射“{[/ refresh || / refresh。 json],methods = [POST]}“on public java.lang.Object org.springframework.cloud.endpoint.GenericPostableMvcEndpoint.invoke()
例外:
org.springframework.web.HttpRequestMethodNotSupportedException:不支持请求方法'HEAD' 在org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.handleNoMatch(RequestMappingInfoHandlerMapping.java:20
答案 0 :(得分:1)
我认为只有在您的微服务中有@RestController
时才会出现此问题。
正如我所看到的,在这里,您是具有@RestController
的微服务中的差异句柄:
2017-02-22 13:54:38.382 **ERROR** [micro-service-1,e9a053f5ffa72714,3980777f97a147f9,true] 10956 --- [http-nio-auto-3-exec-1] c.s.e.c.e.DefaultExceptionHandler
: ErrorResponse [errorCode=90000, description=Request method 'HEAD' not supported, correlationId=e9a053f5ffa72714, externalErrorCode=null, additionalProperties={}]
org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'HEAD' not supported
at org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.handleNoMatch(RequestMappingInfoHandlerMapping.java:207)
at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.lookupHandlerMethod(AbstractHandlerMethodMapping.java:374)
at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:314)
...
在这里,你是另一个,但在这种情况下,没有@RestController
:
2017-02-22 15:14:49.795 **WARN** [micro-service-2,897590499c7c776c,
74a8108edccafb5e,true] 27623 --- [http-nio-auto-2-exec-5]
o.s.web.servlet.PageNotFound : Request method 'HEAD' not supported
答案 1 :(得分:1)
我能够通过以下方式解决这个问题:
@Component
public class ActuatorHeadEndpoint extends EndpointMvcAdapter {
public ActuatorHeadEndpoint(RefreshEndpoint delegate) {
super(delegate);
}
@RequestMapping(method = RequestMethod.HEAD)
@ResponseBody
@Override
public Object invoke() {
if (!getDelegate().isEnabled()) {
return new ResponseEntity<>(Collections.singletonMap(
"message", "This endpoint is disabled"), HttpStatus.NOT_FOUND);
}
return new ResponseEntity<>("", HttpStatus.METHOD_NOT_ALLOWED);
}
}
答案 2 :(得分:0)
fran谢谢你是对的,这解决了它的问题,因为该类有一个@ExceptionHandler(Exception.class),它通过返回500处理未指定的异常并将其视为内部服务器错误。在建议中将HttpRequestMethodNotSupportedException显式定义为@ExceptionHandler,并使用spring boot管理员期望的默认执行器JSON响应(405)处理它,一切正常。
答案 3 :(得分:0)
这是Spring Boot Actuator中的错误。当管理端口与服务器端口不同时,管理将保留而没有DefaultHandlerExceptionResolver,该函数负责在不允许该方法时返回错误405。
这会在Spring Boot Admin中引起问题,因为在某些情况下而不是其他情况,它期望错误405。它使用HEAD方法验证端点是否存在。用正确的方法调用端点将执行代码,其目的只是验证它是否存在。