【问题标题】:How to generate the correct sitemap namespace using JAXB and Spring @ResponseBody in controller?如何在控制器中使用 JAXB 和 Spring @ResponseBody 生成正确的站点地图命名空间?
【发布时间】:2011-12-06 15:40:01
【问题描述】:

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

我的控制器:

@Controller
@RequestMapping("/sitemap")
public class SitemapController
{
    public @ResponseBody XMLURLSet getSitemap(){
       XMLURLSet urlSet = new XMLURLSet();
       //populate urlList
       urlSet.setUrl(urlList);
       return 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;
}

}

我的 url 元素:

   @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;
    }

}

我期望生成的内容:

<?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>

生成了什么:

<ns2:urlset xmlns:ns2="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>http://www.example.com/</loc>
</url>
</ns2:urlset>
</urlset> 

谢谢!

【问题讨论】:

    标签: spring controller jaxb sitemap


    【解决方案1】:

    您可以利用 @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;
    

    更多信息

    【讨论】:

    • 在哪里可以找到文件package-info的内容?
    • package-info 实际上是一个类,因此您将在与域类相同的包中拥有一个 package-info.java,其内容类似于我的答案中给出的内容。
    • 它有效。在同一个线程上,如何添加 XML 的编码来生成 。我已经看到了如何操作 Marshler,但是,我的代码不允许我这样做
    • @Pomario - 默认情况下,JAXB 将生成一个头部(以下可能会有所帮助:blog.bdoughan.com/2011/08/…)。在您的用例中,JAXB 可能正在编组到由 spring 启动的流中,因此您可能需要在该级别进行配置。
    猜你喜欢
    • 2022-11-19
    • 1970-01-01
    • 2013-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-11
    • 1970-01-01
    相关资源
    最近更新 更多