【问题标题】:Spring REST Controller mapping JSONSpring REST 控制器映射 JSON
【发布时间】:2018-07-18 10:01:24
【问题描述】:

想知道是否有人可以帮助我。我有一个 JSON 请求

{
    "blue": "blue",
    "red": "red",
    "greens" : {
        "lightGreen": "lightGreen",
        "darkGreen": "darkGreen"
    }
}

我想使用@RequestBody映射到pojo

这样做:

@PostMapping(path = "/colors", headers = "Accept=application/json")
public void generateClaimDocument(@Valid @RequestBody Colors colors) {
        if (colors != null) {
            service.doSomethingWithColors(colors);
        }
    }

这适用于蓝色和红色,但它根本不映射 JSON 绿色对象。以前从未这样做过,所以有人可以阐明我如何做到这一点吗?

PoJo 的:

public class Colors {

    private String blue;
    private String red;
    private Greens greens;
    //getters and setters
}

public class Greens {

    private String lightGreen;
    private String darkGreen;
    //getters and setters
}

【问题讨论】:

  • "red": "red" 后面好像少了一个逗号。
  • @Berger 所以,我写问题时的错字仍然无法解决我的问题:)

标签: java json spring rest


【解决方案1】:

使用您的代码我找不到任何问题。试过这个例子:

    @RestController
    public static class ColorsService {

        @PostMapping(path = "/colors", headers = "Accept=application/json")
        public void generateClaimDocument(@Valid @RequestBody Colors colors) {
            if (colors != null) {
                System.out.println(colors);
            }
        }
    }

    public static class Colors {

        private String blue;
        private String red;
        private Greens greens;
        //getters and setters

        public String getBlue() {
            return blue;
        }

        public void setBlue(String blue) {
            this.blue = blue;
        }

        public String getRed() {
            return red;
        }

        public void setRed(String red) {
            this.red = red;
        }

        public Greens getGreens() {
            return greens;
        }

        public void setGreens(Greens greens) {
            this.greens = greens;
        }

        @Override
        public String toString() {
            return "Colors{" + "blue=" + blue + ", red=" + red + ", greens=" + greens + '}';
        }
    }

    public static class Greens {

        private String lightGreen;
        private String darkGreen;
        //getters and setters

        public String getLightGreen() {
            return lightGreen;
        }

        public void setLightGreen(String lightGreen) {
            this.lightGreen = lightGreen;
        }

        public String getDarkGreen() {
            return darkGreen;
        }

        public void setDarkGreen(String darkGreen) {
            this.darkGreen = darkGreen;
        }

        @Override
        public String toString() {
            return "Greens{" + "lightGreen=" + lightGreen + ", darkGreen=" + darkGreen + '}';
        }
    }

它会准确打印您发布的内容:

Colors{blue=blue, red=red, greens=Greens{lightGreen=lightGreen, darkGreen=darkGreen}}

【讨论】:

  • 以上代码在逻辑上是完全正确的……POJO类的getter和setter可能有问题……JSON对象是正确的……
  • 是的,它是......不知何故我自己修复了它......甚至不确定我做了什么来打破它。谢谢
猜你喜欢
  • 1970-01-01
  • 2014-10-22
  • 2019-05-25
  • 2016-07-18
  • 1970-01-01
  • 2020-01-16
  • 2012-05-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多