Spring REST @RequestBody使用(XML或JSON)到POJO,而没有注释

时间:2018-08-23 19:30:51

标签: spring rest spring-boot jaxb

我正在编写一个Springboot REST端点,并希望使用XML或JSON请求来提供简单服务。无论哪种情况,我都希望Spring构造一个@RequestBody pojo而不注释任何POJO。这个可以吗?安全?表演者?

我正在阅读this,该书告诉我有关异常的配置。对我来说,这意味着如果我将请求结构化为包含确切的名称和大小写,因为我要填充@RequestBody的POJO成员变量将能够创建我的类SomeRequest。

如果这是我的REST端点:

@RequestMapping(value = GET_FOR_SOMETHING, method = RequestMethod.POST,
        consumes = {MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE},,
        produces = {MediaType.APPLICATION_JSON_VALUE})
public @ResponseBody
StatusResponse<Boolean> getMpdForReqest(@RequestBody SomeRequest request)

这是我的POJO:

public class SomeRequest {

    String one;
    String two;


    public String getOne() {
        return one;
    }

    public void setOne(String one) {
        this.one = one;
    }

    public String getTwo() {
        return two;
    }

    public void setTwo(String two) {
        this.two = two;
    }
}

我的JSON请求:

{
"one": "str",
"two": "str"
}

我的XML请求:

<SomeRequest>
   <one>str</one>
   <two>str</two>
</SomeRequest>

我的问题是:为什么我不应该这样做或完全正常?

谢谢大家。

2 个答案:

答案 0 :(得分:2)

TLDR; 很好。

  

可以吗?安全?表演者?

是的,如果您考虑程序效率,它的性能和表亲一样出色。

如果考虑到Programm的效率,则效率会高得多,因为开发人员不必处理大量注释。

谈到Programm的效率,我鼓励您使用Lombok项目,而不要使用大量的getter和setter方法来限制POJO,这就是现在很酷的孩子们每天要做的事情。

抓住

这将正常工作,只要您的json字段是一个单词且小写即可。

当您使用多字字段名称时,Java标准为camelCase,通常JSON标准为snake_case。在这种情况下,您可以具有“类级别的注释”(每个类一个,因此不多难看)。或者,由于使用的是Spring Boot,因此可以使用应用程序范围的属性(spring.jackson.property-naming-strategy = SNAKE_CASE)。

如果您有一些奇怪的json字段名,并且它们之间有空格,则可能需要使用@JsonProperty批注。记住,这是一个非常有效的json

{
    "just a name with a space" : "123"
}

答案 1 :(得分:0)

POJO为RequestBody的效果很好。只需注意,Spring将为每个无法映射到400 - Bad Request注释对象的请求返回@RequestBody