Rest API getting POST request instead of GET - java

I am new to the spring boot rest API and but I am stuck that when POST request comes for any implemented GET API then what Exception class and error code need to be returned in the response. Any help is appreciated

Quoting from queston:
when POST request comes for any implemented GET API
You can't request by an invalid HTTP method for a specific endpoint. For that you will get
405 Method Not Allowed
You don't have to handle that from your server side.

Related

Spring Boot can't read some API responses

I'm using Spring Boot to consume API. For some APIs, it works but for some others it fails returning 500 Internal Server Error. For example, when consuming this API https://quoters.apps.pcfone.io/api/random it works, but https://reqres.in/api/unknown/23 returns 500 error. To what can this be due?
My code is simple:
restTemplate.getForEntity("https://reqres.in/api/unknown/23", String.class)
A request to the error-causing URL responds with a 404 Not Found status code. Please check if the server is serving on the given endpoint.
As for the 500 Internal Server Error, what's happening is that upon receiving the 404 from the server, your RestTemplate is throwing a RestClientException, which is being converted into a response with the status code: 500. You can add explicit handling for this using #ControllerAdvice, which will allow you to have more control over the response status.
Here's a reference for ControllerAdvice in Spring: https://spring.io/blog/2013/11/01/exception-handling-in-spring-mvc

RestTemplate GET call gives 422

I am in the process of integrating with a third party app and this issue comes while integrating with one of their GET APIs. The API has some headers and params and it's working perfectly fine in Postman. However, the same request when formed in Java and executed with RestTemplate (exchange method) gives 422 unparsable entity. Where could I be going wrong and what could be done to fix this issue?
It really depends on the server end why it responds with that HTTP code.
Definition of 422 Unprocessable Entitycode from Mozilla website:
The HyperText Transfer Protocol (HTTP) 422 Unprocessable Entity response status code indicates that the server understands the content type of the request entity, and the syntax of the request entity is correct, but it was unable to process the contained instructions.
which means, the data is correct, and server understood it but it cannot process the request.
I suggested you try in RestTemplate using the same exact values tested successfully on Postman.
A screenshot on Postman and your some snapshot of your code on the headers and request params will help to debug further.
Make sure you don't mistake #PathVariable with #RequestParam.

Call drive Rest API: 400 bad request

I am trying to use drive Rest API in my app by following the official quickstart documentation. I generated a SHA1 key, everything works fine but when I call drive API from android phone, I get 400 bad request.
How is this caused and how can I fix this?
HTTP 400 means that the server cannot or will not process the request due to an apparent client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).
Could you please take a look at your HTTP request whether it is what you intended it to be?

Java webservices - send object in request headers

I am using Jaxws to consume a webservice. while iam sending request i need to send an object in the request headers. When i am invoking the service from Soap-UI iam successfully getting the data. but the same in java i am unable to get it. I researched a lot on this any one know please help me how to do it.
Here is my java code
//getting the service
MyService servc = new MyService();
MyServiceSoap soap = servc.getMyServiceSoap();
//call the service
System.out.println(soap.SERVICE_A("123456789")); //getting null as response because i am not setting userid, password
I want to set the userid,password to the Authentication pojo object and set it to the soap headers and send the request. how i can do this.?
Here is my Soap-ui request screenshot
Please see the SoapUI request format
My Questions is : How to send a java object in the soap request headers.?
Thanks in Advance,
Praneeth.
From my understanding, what you're lacking is the Basic Authentication headers, where you pass the following in the HTTP header:
Authorization: Basic <Base64(username:password)>
Check in your SOAP-UI if the request sends this.
Here are some SO topics that may help you implement it:
Java Web Service client basic authentication
How do I consume a web service protected with HTTP basic authentication using the CXF framework?

HTTP 403 Forbidden error for some contextio 2.0 requests signed using scribe oauth service

I wrote a context.io 2.0 java client for : accounts,discovery, threads and messages operations to be used in my project (based on the available ContextIO Java client).
My code is at : https://github.com/dileepajayakody/isis-reputationbox/blob/master/reputationbox/dom/src/main/java/at/tomtasche/contextio/ContextIO_V20.java
While testing it, when I invoke the accounts request: https://api.context.io/2.0/accounts and discovery requests (eg: https://api.context.io/2.0/discovery?email=testemail#gmail.com&source_type=IMAP, I successfully get the desired response with a HTTP 200
However when I invoke the messages, threads, contacts requests by adding the account_id parameter in the request URL (eg : https://api.context.io/2.0/accounts/1234ff425ad/messages) I get an empty JSON array with a HTTP 403 Forbidden response.
When I try out the same request in the contextio developer console, I get the response without a problem.
I don't think it's something wrong with the way I sign the oauth request since it's the same way I sign for accounts and discovery requests for which I get the contextIO response properly.
Any help in resolving this error is much appreciated.
Thanks,
Dileepa
I don't think the issue is related to oauth request signing, since we normally return 401 or 404 messages for errors there.
The fact there's no body content with the 403 response leads me to believe your api_key does not own the account specified. If it did own it then we would include a json array with type, code, value parameters to help debug the issue. If you have two developer accounts then you may just be using the wrong one for this test.
I hope this helps. If not, please feel free to contact us at support#context.io.
Thanks!
Dan

Categories