Janekx
Janekx

Reputation: 641

Spring Boot REST Controller is not parsing the given Json parameter to Java object

Using Spring Boot, I want to build a Rest controller. But Spring fails to convert Json to Java object automatically. And yes:

Here is my REST Controller:

@RestController
public class HelloController {

     @RequestMapping(value= "/abc", method=RequestMethod.POST)
     @ResponseStatus(HttpStatus.OK)
     public @ResponseBody MyResponse handlePurchase(@RequestParam A request){
         return new MyResponse("Simply the best");
     }

}

Here is A.java:

public class A implements Serializable {

    private B something;

    public B getSomething() {
        return Something;
    }

    public void setSomething(B something) {
        this.Something = something;
    }

    @Override
    public String toString() {
        return "A [Something=" + something + "]";
    }

    public A(B something) {
        super();
        this.Something = something;
    }

    public A() {
        super();
    }


}

Here is B.java which is used by A.java:

public class B implements Serializable {
    private String something;
    private int catsNumber;
    private int dogsNumber;

    public String getSomething() {
        return something;
    }

    public void setSomething(String something) {
        this.something = something;
    }

    public int getCatsNumber() {
        return catsNumber;
    }

    public void setCatsNumber(int catsNumber) {
        this.catsNumber = catsNumber;
    }

    public int getDogsNumber() {
        return dogsNumber;
    }

    public void setDogsNumber(int dogsNumber) {
        this.dogsNumber = dogsNumber;
    }

    @Override
    public String toString() {
        return "B [something=" + something + ", catsNumber=" + catsNumber + ", dogsNumber=" + dogsNumber + "]";
    }

    public B() {
        super();
    }


}

Hope someone can help me on this, neither worked yet:

Upvotes: 3

Views: 4450

Answers (1)

JohanB
JohanB

Reputation: 2148

@RequestParam indicates an url parameter http://foo.com?parameter=x. When using post, you need to define a @RequestBody

@RequestMapping(value= "/abc", method=RequestMethod.POST)
@ResponseStatus(HttpStatus.OK)
public @ResponseBody MyResponse handlePurchase(@RequestBody A a){
     return new MyResponse("Simply the best");
}

Upvotes: 2

Related Questions