Перестал работать генератор кода Java - PullRequest
0 голосов
/ 10 июля 2019

У меня есть некоторый Java-код для создания моей карты сайта. Вдруг перестанет работать.

Когда я ввожу https://example.com/sitemap.xml, он возвращает карту сайта в неотформатированном виде, я думаю, из-за этого она была отклонена в консоли поиска Google.

Это проект Spring Boot 2.0.5 RELEASE.

SitemapController.java ==>

@Controller
public class SitemapController {

    @RequestMapping("/sitemap.xml")
    @ResponseBody
    public XmlUrlSet main() {

        XmlUrlSet xmlUrlSet = new XmlUrlSet();

        create(xmlUrlSet, "/", XmlUrl.Priority.HIGH);

        return xmlUrlSet;
    }

    private void create(XmlUrlSet xmlUrlSet, String link, XmlUrl.Priority priority) {
        xmlUrlSet.addUrl(new XmlUrl("https://example.com" + link, priority));
    }
}

XmlUrl.java ==>

@XmlAccessorType(value = XmlAccessType.NONE)
@XmlRootElement(name = "url")
public class XmlUrl {
    public enum Priority {
        HIGH("1.0"), MEDIUM("0.5");

        private String value;

        Priority(String value) {
            this.value = value;
        }

        public String getValue() {
            return value;
        }
    }

    @XmlElement
    private String loc;

    @XmlElement
    private String lastmod = LocalDateTime.now().format(DateTimeFormatter.ISO_DATE);

    @XmlElement
    private String changefreq = "daily";

    @XmlElement
    private String priority;

    public XmlUrl() {

    }

    public XmlUrl(String loc, Priority priority) {
        this.loc = loc;
        this.priority = priority.getValue();
    }

    public String getLoc() {
        return loc;
    }

    public String getPriority() {
        return priority;
    }

    public String getChangefreq() {
        return changefreq;
    }

    public String getLastmod() {
        return lastmod;
    }
}

XmlUrlSet.java ==>

@XmlAccessorType(value = XmlAccessType.NONE)
@XmlRootElement(name = "urlset", namespace = "http://www.sitemaps.org/schemas/sitemap/0.9")
public class XmlUrlSet {

    @XmlElements({@XmlElement(name = "url", type = XmlUrl.class)})
    private Collection<XmlUrl> xmlUrls = new ArrayList<XmlUrl>();

    public void addUrl(XmlUrl xmlUrl) {
        xmlUrls.add(xmlUrl);
    }

    public Collection<XmlUrl> getXmlUrls() {
        return xmlUrls;
    }
}

package-info.java ==>

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

package com.example.utility;

import javax.xml.bind.annotation.XmlSchema;
import javax.xml.bind.annotation.XmlNsForm;

Я ожидал вывод, подобный этому:

<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
    <url>
        <loc>https://example.com/</loc>
        <lastmod>2017-09-29</lastmod>
        <changefreq>daily</changefreq>
        <priority>1.0</priority>
    </url>
</urlset>

Но я получаю неформатированный XML, подобный этому:

https://example.com/2019-07-09daily1.0

Пожалуйста, помогите!

1 Ответ

0 голосов
/ 10 июля 2019

Нашли решение!Нужно изменить контроллер, чтобы он выставлял параметр «производит», как показано ниже:

@RequestMapping(value="/sitemap.xml", produces = MediaType.TEXT_XML_VALUE)
...