### Elasticsearch Version

8.2.0

### Installed Plugins

_No response_

### Java Version

_bundled_

### OS Version

Cloud

### Problem Description

Creating a PIT without the required `?keep_alive` parameter throws a NPE which maps to HTTP status code `500 Internal Server Error` whereas really this isn't a server-side error, it's a bad request, so the status code should be something like `400 Bad Request`

### Steps to Reproduce

```
# Request:
POST /_pit

# Response:
# 500 Internal Server Error
# {
#   "status": 500,
#   "error": {
#     "reason": "[keep_alive] parameter must be non null",
#     "root_cause": [
#       {
#         "reason": "[keep_alive] parameter must be non null",
#         "type": "null_pointer_exception"
#       }
#     ],
#     "type": "null_pointer_exception"
#   }
# }
```

### Logs (if relevant)

_No response_
server/src/main/java/org/elasticsearch/action/search/OpenPointInTimeRequest.java
private String[] indices;
    private IndicesOptions indicesOptions = DEFAULT_INDICES_OPTIONS;
    private TimeValue keepAlive;
    @Nullable
    private String routing;
    @Nullable
    private String preference;
    public static final IndicesOptions DEFAULT_INDICES_OPTIONS = IndicesOptions.strictExpandOpenAndForbidClosed();