Spring-boot应用程序以JSON格式而不是xml的响应?

时间:2018-09-19 08:41:41

标签: xml spring-boot

有一个spring-boot应用程序(web + jpa) 所以,我有控制器:

@RestController
public class CustomerController {
    @Autowired
    private CustomerService customerService;

@RequestMapping(value = "/customers", method = RequestMethod.GET)
public @ResponseBody List<Customer> findAllCustomers() {
    return customerService.findAllCustomers();
}

@RequestMapping(value = "/customers", method = RequestMethod.POST)
public void addCustomer(@RequestBody Customer customer) {
    customerService.addCustomer(customer);
}

型号:

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@Entity
@Table(name="customer")
@XmlRootElement(name="customer")
public class Customer{
    @Id
    private String id;
    private String name;

    public Customer(String id, String name) {
        this.id = id;
        this.name = name;
    }

    public Customer() {
    }

    public String getId() {
        return id;
    }

    @XmlElement
    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    @XmlElement
    public void setName(String name) {
        this.name = name;
    }
}

还有用于绑定jpa和rest的服务层。

当我请求时:

<customer>
    <id>first</id>
    <name>first name of metric</name>
</customer>

这很好,客户已添加到数据库中,但是,当我尝试获取所有客户时,响应为json格式,但是我希望使用xml。如何解决该问题?

3 个答案:

答案 0 :(得分:1)

将控制器方法标记为产生application/xml个响应(produces = MediaType.APPLICATION_XML_VALUE)。

答案 1 :(得分:1)

我认为您在调用rest方法时使用了错误的接受类型。

@ResponseBody将根据外部客户端的功能和类路径上可用的库自动序列化返回值。如果Jackson在类路径中可用,并且客户端指示他们可以接受JSON,则返回值将自动作为JSON发送。如果JRE为1.7或更高(意味着JRE包含JAXB),并且客户端指示他们可以接受XML,则返回值将自动以XML的形式发送。

答案 2 :(得分:0)

通过添加解决

    <dependency>
        <groupId>com.fasterxml.jackson.dataformat</groupId>
        <artifactId>jackson-dataformat-xml</artifactId>
    </dependency>