Это мой первый опыт работы с Grails.Кодовая база внешнего интерфейса, где выполняется вызов API -
try{
def serviceResponse = restClient.post(
path: "/api/endpoint",
headers:['Authorization': "Bearer "+sCtx.accessToken]){
type "application/x-www-form-urlencoded"
charset "UTF-8"
urlenc
"interval":interval,"type":typeVal,"value":value,"count":count, "perTxnLimit":perTxnLimit
}
}catch (RESTClientException ex) {
println 'exception resp '+ex?.response?.statusMessage
println 'badResponse==' + ex?.response?.statusCode //404
println 'response body==' + ex?.response?.contentAsString //or for raw bytes[] use ex.response.data
def errJson = JSON.parse (ex?.response?.contentAsString )//or for raw bytes[] use ex.response.data
true?.json
}
Вывод вышеуказанного кода в консоль GGTS (Groovy / grails Tool Suite) -
exception resp OK
badResponse==200
response body==true
Понятия не имею, где и почему этоисключение наступает, даже если статус равен 200, что означает «ОК».Кроме того, внутренний API-интерфейс выполняет изменение БД, которое он должен делать.
Ответ из журналов внутреннего проекта Springboot (API отвечает логическим значением true) -
143 > POST http://backend/api/endpoint
143 > Accept: */*
143 > accept-encoding: gzip, deflate
143 > Authorization: Bearer <auth>
143 > Connection: close
143 > Content-Length: 53
143 > Content-Type: application/x-www-form-urlencoded
143 > Host: somedomain.com
143 > Postman-Token: cc3dd170-3f6e-4c29-b734-15722e3035d5
143 > User-Agent: PostmanRuntime/7.4.0
143 > X-Forwarded-For: 115.112.95.170, 10.30.1.141
143 > X-Forwarded-Host: somedomain.com
143 > X-Forwarded-Port: 443
143 > X-Forwarded-Proto: https
143 > X-Forwarded-Server: somedomain.com
2018-11-25 12:41:52,407 12403930 [XNIO-3 task-3] INFO [LoggingFilter.java:155] - 80 * Server responded with a response on thread XNIO-3 task-3
80 < 200
80 < Content-Type: application/json
Базовая кодовая база -
@Path("api/endpoint")
@POST
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces(MediaType.APPLICATION_JSON)
public boolean customerInducedLimit(@FormParam("type") String type, @FormParam("interval") String interval, @BeanParam CustomerInducedLimitReqDto dto,
@Context SecurityContext security) {
try{
return inducedLimitService.createOrUpdateInducedLimit(uuid,type, interval, dto);
} catch(InvalidInputException ex){
logger.error("invalid parameters");
return false;
} catch(AccountNotFoundException ex){
logger.error("Account not found exception");
return false;
} catch(Exception e){
logger.error("Exception occured while processing customer induced limits");
return false;
}
}