Spring 3 mvc中返回pdf,json,xml等不同的view博客分類:
JAVA相關(guān)springspring mvc就是好,特別是rest風(fēng)格的話,一個(gè)
org.springframework.web.servlet.view.ContentNegotiatingViewResolver就可以根據(jù)不同的場景返回不同的view了,比如返回json,xml,pdf等.馬上看代碼實(shí)現(xiàn)
先是一個(gè)簡單的pojo
Java代碼
package com.hmkcode.vo;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "person")
public class Person {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String toString(){
return "ID: "+id+" - Name: "+name;
}
}
注意使用@XmlRootElement標(biāo)簽之。
然后是controller:
Java代碼
@Controller
public class MyController {
@RequestMapping("/view")
public Person getPerson(Model model){
Person person = new Person();
person.setId(1);
person.setName("test");
model.addAttribute("person",person);
return person;
}
然后分別假設(shè)要導(dǎo)出為PDF的view,引入著名的itext了;
Java代碼
public class PdfView extends AbstractPdfView {
protected void buildPdfDocument(
Map model,
Document doc,
PdfWriter writer,
HttpServletRequest req,
HttpServletResponse resp)
throws Exception {
Person person = (Person) model.get("person");
doc.add( new Paragraph(person.toString()));
}
這里演示簡單往itext中寫入一個(gè)輸出而已;
然后是web.xml:
Java代碼
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
最核心的配置來了:
Java代碼
<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
<property name="order" value="1" />
<property name="mediaTypes">
<map>
<entry key="json" value="application/json" />
<entry key="xml" value="application/xml" />
<entry key="pdf" value="application/pdf" />
</map>
</property>
<property name="defaultViews">
<list>
<!-- JSON View -->
<bean
class="org.springframework.web.servlet.view.json.MappingJacksonJsonView">
</bean>
<!-- XML view -->
<bean class="org.springframework.web.servlet.view.xml.MarshallingView">
<constructor-arg>
<bean class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
<property name="classesToBeBound">
<list>
<value>com.test.Person</value>
</list>
</property>
</bean>
</constructor-arg>
</bean>
<!-- PDF view -->
<bean class="com.test.PdfView">
</bean>
</list>
</property>
<property name="ignoreAcceptHeader" value="true" />
t;/bean>
可以看到,其中使用的是:
org.springframework.web.servlet.view.ContentNegotiatingViewResolver,對(duì)其pdf,xml.json進(jìn)行分別的view設(shè)置,JSON用的是著名的jackyson去解析了;
最后,通過rest風(fēng)格的地址,比如http://localhost/view/view.json,返回json;
http://localhost/view/view.pdf,則導(dǎo)出到pdf,http://localhost/view/view.xml,
返回前端就xml了,真的十分方便