복붙노트

[SPRING] 컨트롤러에서 JAXB 및 Spring @ResponseBody를 사용하여 올바른 사이트 맵 네임 스페이스를 생성하는 방법은 무엇입니까?

SPRING

컨트롤러에서 JAXB 및 Spring @ResponseBody를 사용하여 올바른 사이트 맵 네임 스페이스를 생성하는 방법은 무엇입니까?

네임 스페이스를 올바르게 만들 수 없다는 점을 제외하면 모든 것이 잘 작동합니다. 어떤 도움이라도 대단히 감사합니다!

내 컨트롤러 :

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

내 url 세트 :

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

감사!

해결법

  1. ==============================

    1.@XmlSchema 주석을 사용하여 elementFormDefault가 규정 된 요소를 지정할 수 있습니다. 이것은 유스 케이스에 도움이 될 것입니다.

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

    자세한 내용은

  2. from https://stackoverflow.com/questions/8402575/how-to-generate-the-correct-sitemap-namespace-using-jaxb-and-spring-responsebod by cc-by-sa and MIT license