The underlying implementation class is the same so I guess they can be cast to the same thing
With underlying implementation class, do you mean the class or the actual object?
Are there conditions with one of them being null while the other isn't? Or could they ever refer to different HTTP requests?
Injection is not magic, there is some kind of "injection provider" that looks at the annotations and method signatures and "force feeds" some value to them. This value is taken from somewhere (in this case the active http request). I would say that there is a bug somewhere is both methods are supported but the value of the different approaches differ.