Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 325bc07

Browse files
committedJun 26, 2024·
Update to the latest oatpp API
1 parent a8dab27 commit 325bc07

File tree

4 files changed

+37
-18
lines changed

4 files changed

+37
-18
lines changed
 

‎CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
cmake_minimum_required(VERSION 3.1)
1+
cmake_minimum_required(VERSION 3.20)
22
project(crud)
33

44
set(CMAKE_CXX_STANDARD 17)

‎src/AppComponent.hpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
#include "oatpp/network/tcp/server/ConnectionProvider.hpp"
1515

16-
#include "oatpp/json/ObjectMapper.hpp""
16+
#include "oatpp/json/ObjectMapper.hpp"
1717

1818
#include "oatpp/macro/component.hpp"
1919

@@ -72,9 +72,7 @@ class AppComponent {
7272
OATPP_COMPONENT(std::shared_ptr<oatpp::web::mime::ContentMappers>, contentMappers); // get ContentMappers component
7373

7474
auto connectionHandler = oatpp::web::server::HttpConnectionHandler::createShared(router);
75-
connectionHandler->setErrorHandler(std::make_shared<ErrorHandler>(
76-
contentMappers->getMapper("application/json"))
77-
);
75+
connectionHandler->setErrorHandler(std::make_shared<ErrorHandler>(contentMappers));
7876
return connectionHandler;
7977

8078
}());

‎src/ErrorHandler.cpp

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,42 @@
11

22
#include "ErrorHandler.hpp"
3+
#include "oatpp/data/stream/BufferStream.hpp"
34

4-
ErrorHandler::ErrorHandler(const std::shared_ptr<oatpp::data::mapping::ObjectMapper>& objectMapper)
5-
: m_objectMapper(objectMapper)
5+
ErrorHandler::ErrorHandler(const std::shared_ptr<oatpp::web::mime::ContentMappers>& mappers)
6+
: m_mappers(mappers)
67
{}
78

8-
std::shared_ptr<ErrorHandler::OutgoingResponse>
9-
ErrorHandler::handleError(const Status& status, const oatpp::String& message, const Headers& headers) {
9+
std::shared_ptr<ErrorHandler::OutgoingResponse> ErrorHandler::renderError(const HttpServerErrorStacktrace& stacktrace) {
10+
11+
Status status = stacktrace.status;
12+
if(status.description == nullptr) {
13+
status.description = "Unknown";
14+
}
15+
16+
oatpp::data::stream::BufferOutputStream ss;
17+
18+
for(auto& s : stacktrace.stack) {
19+
ss << s << "\n";
20+
}
1021

1122
auto error = StatusDto::createShared();
1223
error->status = "ERROR";
13-
error->code = status.code;
14-
error->message = message;
24+
error->code = stacktrace.status.code;
25+
error->message = ss.toString();
26+
27+
std::vector<oatpp::String> accept;
28+
if(stacktrace.request) {
29+
accept = stacktrace.request->getHeaderValues("Accept");
30+
}
31+
32+
auto mapper = m_mappers->selectMapper(accept);
33+
if(!mapper) {
34+
mapper = m_mappers->getDefaultMapper();
35+
}
1536

16-
auto response = ResponseFactory::createResponse(status, error, m_objectMapper);
37+
auto response = ResponseFactory::createResponse(stacktrace.status,error,mapper);
1738

18-
for(const auto& pair : headers.getAll()) {
39+
for(const auto& pair : stacktrace.headers.getAll()) {
1940
response->putHeader(pair.first.toString(), pair.second.toString());
2041
}
2142

‎src/ErrorHandler.hpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,20 @@
66

77
#include "oatpp/web/server/handler/ErrorHandler.hpp"
88
#include "oatpp/web/protocol/http/outgoing/ResponseFactory.hpp"
9+
#include "oatpp/web/mime/ContentMappers.hpp"
910

10-
class ErrorHandler : public oatpp::web::server::handler::ErrorHandler {
11+
class ErrorHandler : public oatpp::web::server::handler::DefaultErrorHandler {
1112
private:
1213
typedef oatpp::web::protocol::http::outgoing::Response OutgoingResponse;
1314
typedef oatpp::web::protocol::http::Status Status;
1415
typedef oatpp::web::protocol::http::outgoing::ResponseFactory ResponseFactory;
1516
private:
16-
std::shared_ptr<oatpp::data::mapping::ObjectMapper> m_objectMapper;
17+
std::shared_ptr<oatpp::web::mime::ContentMappers> m_mappers;
1718
public:
1819

19-
ErrorHandler(const std::shared_ptr<oatpp::data::mapping::ObjectMapper>& objectMapper);
20+
ErrorHandler(const std::shared_ptr<oatpp::web::mime::ContentMappers>& mappers);
2021

21-
std::shared_ptr<OutgoingResponse>
22-
handleError(const Status& status, const oatpp::String& message, const Headers& headers) override;
22+
std::shared_ptr<OutgoingResponse> renderError(const HttpServerErrorStacktrace& stacktrace) override;
2323

2424
};
2525

0 commit comments

Comments
 (0)
Please sign in to comment.