您好我想知道如何在使用spring boot时将我的json消息映射到java中的对象。
让我说我喜欢json
{
"customerId": 2,
"firstName": "Jan",
"lastName": "Nowak",
"town": "Katowice"
}
我想在我的java程序中创建它: ,无论出于何种原因,我不希望在字段名称上匹配
public class Customer {
//Something like @Map("customerId")
private long OMG;
//Something like @Map("firstName")
private String WTF;
//Something like @Map("lastName")
private String LOL;
//Something like @Map("town")
private String YOLO;
我找不到我应该使用的注释,不使用jackson,只是内置在spring boot converter中?
答案 0 :(得分:5)
弹簧启动带有杰克逊开箱即用。
您可以使用@RequestBody Spring MVC注释来将json字符串解组为Java对象......就像这样。
@RestController public class CustomerController { //@Autowired CustomerService customerService; @RequestMapping(path="/customers", method= RequestMethod.POST) @ResponseStatus(HttpStatus.CREATED) public Customer postCustomer(@RequestBody Customer customer){ //return customerService.createCustomer(customer); } }
使用@JsonProperty使用相应的json字段名注释实体成员元素。
public class Customer { @JsonProperty("customerId") private long OMG; @JsonProperty("firstName") private String WTF; @JsonProperty("lastName") private String LOL; @JsonProperty("town") private String YOLO; }
答案 1 :(得分:2)
Spring Boot会对依赖项,粘合和默认配置进行分组。它不是序列化API。您应该使用杰克逊来满足您的需求
你应该映射你的课程,例如:
public class Customer {
@JsonProperty("customerId")
private long OMG;
@JsonProperty("firstName")
private String WTF;
@JsonProperty("lastName")
private String LOL;
@JsonProperty("town")
private String YOLO;
....
}
来自JsonProperty注释Javadoc:
标记注释,可用于将非静态方法定义为 "设定器"或者" getter"对于逻辑属性(取决于它 签名),或要使用的非静态对象字段(序列化, 反序列化)作为逻辑属性。
默认值("")表示字段名称用作 属性名称没有任何修改,但可以指定 非空值指定不同的名称。属性名称是指 外部使用的名称,作为JSON对象中的字段名称。