userver: userver/server/handlers/http_handler_json_base.hpp Source File
Loading...
Searching...
No Matches
http_handler_json_base.hpp
Go to the documentation of this file.
1#pragma once
2
3/// @file userver/server/handlers/http_handler_json_base.hpp
4/// @brief @copybrief server::handlers::HttpHandlerJsonBase
5
6#include <userver/server/handlers/http_handler_base.hpp>
7
8USERVER_NAMESPACE_BEGIN
9
10namespace server::handlers {
11
12/// @ingroup userver_components userver_http_handlers userver_base_classes
13///
14/// @brief Convenient base for handlers that accept requests with body in
15/// JSON format and respond with body in JSON format.
16///
17/// ## Example usage:
18///
19/// @snippet samples/config_service/main.cpp Config service sample - component
21public:
22 using Value = formats::json::Value;
23 using HttpRequest = server::http::HttpRequest;
24 using RequestContext = server::request::RequestContext;
25
26 HttpHandlerJsonBase(
27 const components::ComponentConfig& config,
28 const components::ComponentContext& component_context,
29 bool is_monitor = false
30 );
31
32 std::string HandleRequestThrow(const http::HttpRequest& request, request::RequestContext& context) const final;
33
34 virtual Value HandleRequestJsonThrow(const HttpRequest& request, const Value& request_json, RequestContext& context)
35 const = 0;
36
37 static yaml_config::Schema GetStaticConfigSchema();
38
39protected:
40 void ParseRequestData(const http::HttpRequest& request, request::RequestContext& context) const override;
41
42private:
43 FormattedErrorData GetFormattedExternalErrorBody(const CustomHandlerException& exc) const final;
44};
45
46} // namespace server::handlers
47
48template <>
49inline constexpr bool components::kHasValidate<server::handlers::HttpHandlerJsonBase> = true;
50
51USERVER_NAMESPACE_END