This worked fine for me:
$ curl -o /dev/null -s -w "%{http_code}\n" \
-H 'Client-ID: my_client_id_here' -H "Content-Type: application/json" \
-d '{"hub.callback": "http://IP.of.my.raspberrypi:4568", "hub.mode": "subscribe", "hum.lease_seconds": 50000, "hub.topic": "https://api.twitch.tv/helix/users/follows?first=1&from_id=64207063"}' \
-X POST https://api.twitch.tv/helix/webhooks/hub
202
Unfortunately I’m not familiar enough with Java to help debug. But given the CURL version works perfectly fine, I’d be suspicious of how the request payload is being created in Java.