Spring 3 MVC ContentNegotiatingViewResolver Beispiel

Spring 3 MVC ContentNegotiatingViewResolver - Beispiel

Frühling 3,ContentNegotiatingViewResolver, ist ein interessanter Ansichtsauflöser, mit dem Sie dieselbe Ressource (Inhalt oder Daten) für verschiedene Arten von Ansichten wieJSP,XML,RSSausgeben können. s,JSON usw. Einfach ausgedrückt, finden Sie unter der folgenden im Web angeforderten URL Informationen, die in verschiedenen Ansichten angezeigt werden.

  1. http://www.example.com/fruit/banana.rss, wird als RSS-Datei zurückgegeben.

  2. http://www.example.com/fruit/banana.xml, wird als XML-Datei zurückgegeben.

  3. http://www.example.com/fruit/banana.json, wird als JSON-Datei zurückgegeben.

  4. http://www.example.com/fruit/banana, kehrt zu Ihrem Standardansicht-Resolver zurück.

Note
DieseContentNegotiatingViewResolver bestimmen zuerst, „welcher Ansichtsauflöser durch Dateierweiterung zurückgegeben werden soll“. Wenn keine Ansicht übereinstimmt, verwenden Sie den Standardansichtsauflöser. Lesen Sie dieseSpring documentation, um zu untersuchen, wie es funktioniert.

In diesem Tutorial zeigen wir Ihnen, wie SieContentNegotiatingViewResolver verwenden. Am Ende dieses Lernprogramms wird dasselbe Modell in verschiedenen Ansichten zurückgegeben - XML, JSON, RSS und JSP, basierend auf der angeforderten Dateierweiterung.

Verwendete Technologien:

  1. Spring 3.0.5.RELEASE

  2. Jackson 1.7.1

  3. Rome 1.0.0

  4. JDK 1.6

  5. Maven 3

  6. Eclipse 3.6

Note
JAXB ist in JDK1.6 gebündelt, daher müssen Sie es manuell einschließen.

1. Projektabhängigkeit

Deklariert folgende Abhängigkeiten in der Datei Ihres Mavenpom.xml.

    
        3.0.5.RELEASE
    

    

        
        
            org.springframework
            spring-core
            ${spring.version}
        

        
            org.springframework
            spring-web
            ${spring.version}
        

        
            org.springframework
            spring-webmvc
            ${spring.version}
        

        
        
            org.codehaus.jackson
            jackson-mapper-asl
            1.7.1
        

        
        
            net.java.dev.rome
            rome
            1.0.0
        

    

2. Modell

Ein Pojo, das mit JAXB-Anmerkungen versehen ist, damit es in einer XML-Datei ausgegeben werden kann. Außerdem verwenden wir dieses Modell später, um es in verschiedenen Ansichten anzuzeigen.

package com.example.common.model;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "fruit")
public class Fruit {

    String name;
    int quality;

    public String getName() {
        return name;
    }

    @XmlElement
    public void setName(String name) {
        this.name = name;
    }

    public int getQuality() {
        return quality;
    }

    @XmlElement
    public void setQuality(int quality) {
        this.quality = quality;
    }

    public Fruit(String name, int quality) {
        this.name = name;
        this.quality = quality;
    }

    public Fruit() {
    }

}

3. JSON- und XML-Ansicht

Für die Ausgabe von JSON- und XML-Ansichten sind keine zusätzlichen Arbeiten erforderlich. Spring MVC übernimmt die Konvertierung automatisch. Lesen Sie die BeispieleSpring MVC and XML undSpring MVC and JSON.

4. RSS-Ansicht

Um die RSS-Ansicht auszugeben, müssen SieAbstractRssFeedView erweitern. Lesen Sie dieseSpring 3 MVC and RSS example, um zu erfahren, wie es funktioniert.

package com.example.common.rss;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.view.feed.AbstractRssFeedView;
import com.example.common.model.Fruit;
import com.sun.syndication.feed.rss.Channel;
import com.sun.syndication.feed.rss.Content;
import com.sun.syndication.feed.rss.Item;

public class RssFeedView extends AbstractRssFeedView {

    @Override
    protected void buildFeedMetadata(Map model, Channel feed,
        HttpServletRequest request) {

        feed.setTitle("Sample Title");
        feed.setDescription("Sample Description");
        feed.setLink("http://google.com");

        super.buildFeedMetadata(model, feed, request);
    }


    @Override
    protected List buildFeedItems(Map model,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        Fruit fruit = (Fruit) model.get("model");
        String msg = fruit.getName() + fruit.getQuality();

        List items = new ArrayList(1);
        Item item = new Item();
        item.setAuthor("example");
        item.setLink("http://www.example.com");

        Content content = new Content();
        content.setValue(msg);

        item.setContent(content);

        items.add(item);

        return items;
    }
}

5. JSP-Ansicht

Eine JSP-Seite zum Anzeigen der Modelldaten.

Datei: list.jsp



    

Spring @MVC ContentNegotiatingViewResolver

Fruit Name : ${model.name}
Fruit Quality : ${model.quality}

6. Regler

Federkontroller, um ein "Frucht" -Modell zu generieren und es zurückzugeben.

package com.example.common.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.example.common.model.Fruit;

@Controller
@RequestMapping("/fruit")
public class FruitController {

    @RequestMapping(value="{fruitName}", method = RequestMethod.GET)
    public String getFruit(@PathVariable String fruitName, ModelMap model) {

        Fruit fruit = new Fruit(fruitName, 1000);
        model.addAttribute("model", fruit);

        return "list";

    }

}

7. Beispiel für ContentNegotiatingViewResolver

Der Code sollte selbsterklärend sein. Sie müssen jedoch die Eigenschaft "order" definieren, bei der ein niedrigerer Wert eine höhere Priorität erhält. In diesem Fall verwendet Spring MVC, wenn eine URL angefordert wird, "ContentNegotiatingViewResolver" (order = 1), um eine geeignete Ansicht zurückzugeben (basierend auf der in der Eigenschaft "mediaTypes" deklarierten Dateierweiterung). Wenn diese nicht übereinstimmt, verwenden Sie "InternalResourceViewResolver" (order = 2), um eine Standard-JSP-Seite zurückzugeben.



    

    

    
      
      
        
           
           
           
        
      

      
        
          
          
          

          
          

          
          
            
                
                   
                    
                       com.example.common.model.Fruit
                    
                   
                
            
          
         
      
      

    

    
    
        
        
            /WEB-INF/pages/
        
        
            .jsp
        
    

8. Demo

Gleiches Modell und Anzeige in verschiedenen Ansichten überContentNegotiatingViewResolver.

spring mvc and xml demo

spring mvc and json demo

http://localhost:8080/SpringMVC/fruit/banana.rss, wird als RSS-Datei angezeigt.

spring mvc and RSS demo

spring mvc and JSP demo

Quellcode herunterladen