Корневой элемент XML-ответа Springboot Restful показан в виде списка. - PullRequest
0 голосов
/ 29 августа 2018

Я пытаюсь вернуть список опросов в форме XML-ответа. Я могу получить ответ ниже:

<List>
    <item>
        <title>My Favorite Survey</title>
        <description>Description of the Survey</description>
        <surveyId>Survey1</surveyId>
        <questions>
            <question>...</question>
            <question>...</question>
        </questions>
    </item>
</List>

Однако я хотел показать ответ, как показано ниже:

<surveys>
    <survey>
        <title>My Favorite Survey</title>
        <description>Description of the Survey</description>
        <surveyId>Survey1</surveyId>
        <questions>
            <question>...</question>
            <question>...</question>
        </questions>
    </survey>
</surveys>

Вот мой класс POJO:

@JacksonXmlRootElement(localName="survey")
public class Survey {
    @JacksonXmlProperty(localName = "surveyId")
    private String id;
    private String title;
    private String description;

    @JacksonXmlElementWrapper(localName = "questions")
    @JacksonXmlProperty(localName = "question")
    private List<Question> questions;
    // getters and setters

}

Класс контроллера:

@RestController    
class SurveyController {
    @Autowired
    private SurveyService surveyService;

    @GetMapping(path = "/surveys")
    public List<Survey> retrieveQuestions() {
        return surveyService.retrieveAllSurveys();
    }
}

Похоже, @JacksonXmlRootElement(localName="survey") не работает в моем случае, и что я могу сделать, чтобы список отображался как Surveys. Пожалуйста, объясните мне, как я могу использовать свое собственное имя тега вместо списка и элемента.

1 Ответ

0 голосов
/ 29 августа 2018

Для содержимого XML я рекомендую написать XSD, а затем сгенерировать классы JAXB, используя следующий плагин Maven:

<plugin>
    <groupId>org.jvnet.jaxb2.maven2</groupId>
    <artifactId>maven-jaxb2-plugin</artifactId>
    <executions>
        <execution>
            <goals>
                <goal>generate</goal>
            </goals>
            <configuration>
                <generatePackage>com.mycompany.myproject.jaxb</generatePackage>
            </configuration>
        </execution>
    </executions>                                 
    <configuration>
        <args>
            <arg>-mark-generated</arg>
        </args>
        <locale>en</locale>
    </configuration>
</plugin>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...