Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Required request body is missing

I am new at Spring and Rest. I wrote a simple rest like this:

@RequestMapping(value = "/loginTest", method = RequestMethod.POST)
@ResponseBody
public Response loginTest(@RequestBody LoginRequest request) {
    System.out.println("enter loginTest.");
    String account = request.getAccount();
    String password = request.getPassword();
    Response res = new Response();
    return res;
}

And the LoginRequest is like this:

public class LoginRequest {
    private String account;
    private String password;
    public String getAccount() {
        return account;
    }
    public void setAccount(String account) {
        this.account = account;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
}

When I test this via command:

curl -X POST "{"account": "aaa","password": "bbb"}" -H "Content-type:application/json" http://localhost:8080/user/loginTest

But I got the result:

[1/2]: account: aaa --> <stdout>
--_curl_--account: aaa
curl: (6) Could not resolve host: account; nodename nor servname provided, or not known
{
  "timestamp" : "2015-12-30T16:24:14.282+0000",
  "status" : 400,
  "error" : "Bad Request",
  "exception" : "org.springframework.http.converter.HttpMessageNotReadableException",
  "message" : "Bad Request",
  "path" : "/user/loginTest"
}

And also in eclipse console:

Failed to read HTTP message: org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing: public com.test.response.Response com.test.service.UserService.loginTest(com.test.model.request.LoginResquest)

Does the class LoginRequest need an annotation? Because the Jason cannot be converted to a class? Would anyone help me figure this out?

like image 399
Damon Avatar asked Oct 29 '25 17:10

Damon


1 Answers

Request body should be sent in --data switch, in curl.

See this https://superuser.com/questions/149329/what-is-the-curl-command-line-syntax-to-do-a-post-request

So your request should now become

curl -X POST --data '{"account": "aaa","password": "bbb"}' -H "Content-Type:application/json"  http://localhost:8080/user/loginTest

Also if you can run a browser on the machine where you're sending the requests from, then you can try some REST client plugins. They're way easier to use and provide saving requests and history features. Check this plugin

like image 82
11thdimension Avatar answered Nov 01 '25 07:11

11thdimension