2014-01-05 64 views
4

我知道Spring MVC可以輕鬆地返回Json格式的模型;然而,我嘗試了不同的方法來以CSV格式(通過Jackson)返回模型,但無法成功。如何使Spring MVC返回CSV像返回JSON一樣方便

我該怎麼辦?

附上我的模型代碼,控制器代碼,並gradle.build如下:

非常感謝!

型號:

@JsonPropertyOrder({ "staffName", "name" }) 
public class Greeter 
{ 
    String name; 
    String staffName[]; 

    public String getName() 
    { 
     return name; 
    } 

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

    public String[] getStaffName() 
    { 
     return staffName; 
    } 

    public void setStaffName(String[] staffName) 
    { 
     this.staffName = staffName; 
    } 
} 

控制器:

@Controller 
public class GreetingController { 

    @RequestMapping(value = "/greeter/json", method = RequestMethod.GET) 
    public @ResponseBody 
    Greeter getGreeterInJSON() { 

     Greeter greeter = new Greeter(); 

     greeter.setName("default"); 
     greeter.setStaffName(new String[] { "ye", "lichi" }); 

     return greeter; 

    } 

    @RequestMapping(value = "/greeter/csv", method = RequestMethod.GET, consumes = "text/csv") 
    public @ResponseBody 
    Greeter getGreeterInCSV(HttpServletResponse response) { 
     Greeter greeter = new Greeter(); 

     greeter.setName("default"); 
     greeter.setStaffName(new String[] { "ye", "lichi" }); 

     CsvMapper mapper = new CsvMapper(); 
     CsvSchema schema = mapper.schemaFor(Greeter.class); 

     ObjectWriter writer = mapper.writer(schema.withLineSeparator("\n")); 

     File greeterCSV = new File("greeterCSV.csv"); 

     try { 
      writer.writeValue(greeterCSV, greeter); 
     } catch (JsonGenerationException e) { 
      e.printStackTrace(); 
     } catch (JsonMappingException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return greeter; 
    } 
} 

的build.gradle依賴性:

dependencies { 
    compile group: 'commons-collections', name: 'commons-collections', version: '3.2' 

    compile ('org.springframework:spring-context:4.0.0.RELEASE') 
    compile("org.springframework.boot:spring-boot-starter-web:0.5.0.M6") 
    compile("org.thymeleaf:thymeleaf-spring3:2.0.17") 

    // compile "org.codehaus.jackson:jackson-mapper-asl:1.9.13" 
    compile 'com.fasterxml.jackson.core:jackson-databind:2.3.0' 
    compile 'com.fasterxml.jackson.core:jackson-core:2.3.0' 
    compile 'com.fasterxml.jackson.core:jackson-annotations:2.3.0' 

    compile 'com.fasterxml.jackson.dataformat:jackson-dataformat-csv:2.3.0' 

    testCompile group: 'junit', name: 'junit', version: '4.+' 
    testCompile "org.mockito:mockito-all:1.9.5" 
} 

編輯:


Tomcat的錯誤:

HTTP狀態415 -

類型狀態報告

消息

描述,因爲請求的實體是不被請求的資源支持的格式,服務器拒絕了這個請求請求的方法。

+0

以何種方式它不能正常工作?請提供任何堆棧跟蹤等。 –

回答

3

你想不要消耗,但產生 csv。您的方式,服務期望輸入以csv格式提供,這就是爲什麼它抱怨'請求實體是不支持的格式'。關鍵是'請求'在這裏 - 它希望以csv格式輸入一些內容。 將'消費'更改爲'生產'應該可以解決您的問題。

0

您使用GET,所以你在迴應這是CSV所以一定要確保使用產生= 「文本/ CSV」而不是消耗= 「TEXT/CSV」) 這裏期待着什麼: -

@RequestMapping(value = "/greeter/csv", method = RequestMethod.GET, consumes = "text/csv") 
    public @ResponseBody 
我們使用

消耗,當我們把一些

相關問題