我正在编写一个 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
。