type = Not Acceptable,status = 406 Spring On Rest中生成XML时出错

时间:2016-10-23 16:07:53

标签: rest spring-boot

我正在开发Spring Rest和Spring Rest应用程序,如果我尝试生成json,一切都还可以。我可以在浏览器上看到它。没有错误。

但是如果我想生成XML,我使用produce =“application / xml”或者生成= MediaType.TEXT_XML_VALUE和 我收到此错误:

Whitelabel Error Page

This application has no explicit mapping for /error, so you are seeing this as a fallback.

Sun Oct 23 18:30:51 EEST 2016
There was an unexpected error (type=Not Acceptable, status=406).
Could not find acceptable representation

我的休息代码是:

package getExample;

import java.util.ArrayList;
import java.util.List;

import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import pojo.Address;
import pojo.Person;

@RestController
public class GetExampleController {

    @RequestMapping(value = "getExample",method=RequestMethod.GET,produces=MediaType.TEXT_XML_VALUE)
    public List<Person> getExample1(@RequestParam(value = "personId", defaultValue = "0") String id) {
        List<Person> personList = new ArrayList<>();
        Person person1 = new Person("1", "ilkay", "günel",
                new Address("Cennet Mah.", "K.Çekmece", "İstanbul", "TÜRKİYE"));
        personList.add(person1);

        Person person2 = new Person("2", "alican", "akkuş",
                new Address("Cennet Mah.", "K.Çekmece", "İstanbul", "TÜRKİYE"));
        personList.add(person2);

        Person person3 = new Person("3", "mustafa", "demir",
                new Address("Cennet Mah.", "K.Çekmece", "İstanbul", "TÜRKİYE"));
        personList.add(person3);

        if (id.equals("0")) {
            return personList;
        }
        else {
            return personList.subList(Integer.parseInt(id)-1, Integer.parseInt(id));
        }
    }
}

错误是什么?为什么我可以获得XML输出?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

您需要添加jackson-dataformat-xml的依赖关系:

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

否则,您可以使用JAXB注释来注释您的bean。

Spring documentation

  

如果你有Jackson XML扩展(jackson-dataformat-xml)   classpath,它将用于呈现XML响应和非常相似   我们用于JSON的例子可以使用。

     

...

     

如果没有Jackson的XML扩展,JAXB(默认提供)   将使用JDK中的附加要求   [你的班级]注释为@XmlRootElement ...

     

...

     

要让服务器呈现XML而不是JSON,您可能必须发送   一个Accept:text / xml标题(或使用浏览器)。