Spring REST @RequestBody使用(XML 或 JSON)到 POJO,而不添加注释



我正在编写一个 Springboot REST 端点,并希望为简单服务使用 XML 或 JSON 请求。无论哪种情况,我都希望 Spring 在不注释任何 POJO 的情况下构建一个@RequestBody pojo。可以吗?安全?性能?

我正在阅读这篇文章,它告诉我有关异常配置的信息。对我来说,这意味着如果我构建我的请求以包含确切的名称和大小写作为 POJO 成员变量,我想填充@RequestBody将能够创建我的类 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>

我的问题是:为什么我不应该这样做,或者它完全没问题?

谢谢大家。

TLDR;这是完全没问题的。

可以吗?安全?性能?

是的,如果您考虑到程序效率,它的性能与注释表亲一样。

如果考虑到 Programmer的效率,它会更有效率,因为开发人员不必处理一堆注释。

说到编程效率,我鼓励你使用龙目岛项目,而不是用一堆getter和setter方法来破坏你的POJO,这就是现在很酷的孩子所做的。

抓住

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

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

如果您有奇怪的 json 字段名称,中间有空格,则可能需要使用@JsonProperty注释。请记住,这是一个完全有效的 json

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

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

最新更新