如何使用Spring Boot将JSON映射到对象

8

你好,我希望知道如何在使用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转换器?

Spring Boot可以对依赖项进行分组、粘合和默认配置。它不是一个序列化API。您应该使用Jackson来满足您的需求。 - davidxxx
2个回答

15

Spring Boot默认集成了Jackson。

您可以使用@SpringMVC注释的@RequestBody将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;
}

3

Spring Boot对依赖项、粘合和默认配置进行分组。它不是一个序列化API。您应该使用Jackson来满足您的需求。

您应该映射您的类,例如:

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中的内容:

标记注释,可用于将非静态方法定义为逻辑属性的“setter”或“getter”(根据其签名),或将非静态对象字段用作要使用的逻辑属性(序列化,反序列化)。

默认值(“”)表示字段名称用作属性名称而不进行任何修改,但可以指定为非空值以指定不同的名称。属性名称是指在JSON对象中用作字段名称的外部使用名称。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接