@RequestMapping(value = "/api/service", method = RequestMethod.POST)
public void serviceByPost(@RequestParam(value = "s") String sessionId,
@RequestHeader(value = "Content-Type") MimeType contentType,
@RequestBody String requestContent,
HttpServletRequest request,
HttpServletResponse response) throws IOException, JSONException {
if (!connect(sessionId, response)) return;
try {
Converter converter = conversionFactory.getConverter(contentType);
ServiceRequest serviceRequest = converter.parseServiceRequest(requestContent);
if (!restServicePermissions.isPermitted(serviceRequest.getServiceName(), serviceRequest.getMethodName())) {
response.sendError(HttpServletResponse.SC_FORBIDDEN);
return;
}
Object result = serviceRequest.invokeMethod();
String converted = converter.processServiceMethodResult(result, serviceRequest.getMethodReturnType());
writeResponse(response, converted, converter.getMimeType());
} catch (RestServiceException e) {
response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.getMessage());
log.error("Error processing request: " + request.getRequestURI() + "?" + request.getQueryString(), e);
} catch (Throwable e) {
sendError(request, response, e);
} finally {
authentication.end();
}
}