简体   繁体   English

解决视图 - Spring REST 服务

[英]Resolving the view - Spring REST service

I want to generate raw xml from a REST service using Spring.我想使用 Spring 从 REST 服务生成原始 xml。 Something is getting lost in resolving the views.在解决这些观点时有些东西会丢失。 I am getting the following:我得到以下信息:

javax.servlet.ServletException: Circular view path [RemedyXml]: would dispatch back to the current handler URL [/audiClave/REST/remedies/RemedyXml] again. Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, due to default view name generation.)

Here is the web.xml (abbreviated):这里是 web.xml(缩写):

<servlet>
    <servlet-name>rest</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/restServlet-context.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>rest</servlet-name>
    <url-pattern>/REST/</url-pattern>
</servlet-mapping>

restServlet-context.xml is as follows (abbreviated): restServlet-context.xml如下(略):

<context:component-scan base-package="com.audiClave.controllers" />
<bean id="beanNameResolver" 
    class="org.springframework.web.servlet.view.BeanNameViewResolver"/>
<bean id = "RemedyXml" class = "com.audiClave.views.RemedyXmlView"/>

Now for the controller:现在对于 controller:

@Controller
public class RestController{
private static final String REMEDIES = "remedies";

    @RequestMapping(value = "/REST/remedies/{language}", method = RequestMethod.GET)
    protected ModelAndView getAllRemedies(HttpServletResponse response,
        @PathVariable("language") String language) throws IOException {
        Map<String, List<Remedy>> myModel = new HashMap<String, List<Remedy>>();
        RemediesBean remediesBean = Factory.getRemediesBean();
        myModel.put("remedies", remediesBean.loadRemedies(language));
        return new ModelAndView("RemedyXml","model", myModel);

And finally the view:最后是视图:

public class RemedyXmlView implements View
{

  /** XML document */
  private Document doc = null;

  public RemedyXmlView()
  {
  }

  public String getContentType()
  {
    return "text/xml";
  }

@Override
  public void render(Map<String, ?> model, HttpServletRequest request, HttpServletResponse response) 
    throws Exception {

    /** Generate the XML */
    // Start document with "root" tag
    this.doc = new Document(new Element("model"));
    // Get the root tag
    Element rootEl = this.doc.getRootElement();

    // Add other tags
    Map<String,List<Remedy>> myModel = (Map<String,List<Remedy>>)model.get("model");
    List<Remedy> messages = (List<Remedy>)myModel.get("remedies");
    Iterator<Remedy> iter = messages.iterator();
    while(iter.hasNext()){
      Remedy remedy = iter.next();

      // Add new xml element
      Element messageEl = new Element("remedy");
      messageEl.setText(remedy.getName());
      rootEl.addContent(messageEl);
    }

    // printXMLDocument(this.doc);

    /** Set response type and write XML */
    XMLOutputter outp = new XMLOutputter();
    outp.setFormat(Format.getPrettyFormat());
    String xmlAsString = outp.outputString(doc);

    response.setContentType("text/xml");
    response.setContentLength(xmlAsString.length());

    PrintWriter out = new PrintWriter(response.getOutputStream());
    out.print(xmlAsString);
    out.flush();
    out.close();    
  }

} }

Any input would be appreciated, thanks.任何输入将不胜感激,谢谢。

I moved the view to a.JSP implementation and the problem was resolved with a lot less code.我将视图移至 a.JSP 实现,并且使用更少的代码解决了问题。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM