如何在控制器中使用JAXB和Spring @ResponseBody生成正确的站点地图命名空间?

Pom*_*rio 6 sitemap spring controller jaxb

除了我无法正确创建命名空间之外,一切正常.任何帮助深表感谢!

我的控制器:

@Controller
@RequestMapping("/sitemap")
public class SitemapController
{
    public @ResponseBody XMLURLSet getSitemap(){
       XMLURLSet urlSet = new XMLURLSet();
       //populate urlList
       urlSet.setUrl(urlList);
       return urlSet;
    }
}
Run Code Online (Sandbox Code Playgroud)

我的urlset:

@XmlRootElement(name = "url")
public class XMLURL {
   String loc;
   @XmlElement(name = "loc")
   public String getLoc(){
      return loc;
   }
   public void setLoc(String loc){
   this.loc = loc;
}
Run Code Online (Sandbox Code Playgroud)

}

我的网址元素:

   @XmlRootElement(name = "urlset", namespace = "http://www.sitemaps.org/schemas/sitemap/0.9")
    public class XMLURLSet{
       List<XMLURL> url;
       public List<XMLURL> getUrl(){
          return url;
       }
       public void setUrl(List<XMLURL> url){
       this.url = url;
    }

}
Run Code Online (Sandbox Code Playgroud)

我期望产生什么:

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>http://www.example.com/</loc>
</url>
Run Code Online (Sandbox Code Playgroud)

产生了什么:

<ns2:urlset xmlns:ns2="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>http://www.example.com/</loc>
</url>
</ns2:urlset>
</urlset> 
Run Code Online (Sandbox Code Playgroud)

谢谢!

bdo*_*han 6

您可以利用@XmlSchema注释指定elementFormDefault是否合格.这应该有助于您的用例.

@XmlSchema(
    namespace = "http://www.sitemaps.org/schemas/sitemap/0.9",
    elementFormDefault = XmlNsForm.QUALIFIED)
package example;

import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;
Run Code Online (Sandbox Code Playgroud)

欲获得更多信息

  • `package-info`实际上是一个类,因此你将在与域类相同的包中有一个`package-info.java`,其内容类似于我的答案中给出的内容. (2认同)