2013-11-15 49 views
5

我很難接受JSON輸入到我的Spring Restful Web服務中。基本上我的目的是接受一個JSON並返回一個zip文件。但我無法跨越自己的第一步。 以下是控制器代碼如何在Spring Restful Webservice中接受JSON輸入?

@Controller 
@RequestMapping(value = "/request") 
public class PasskitController { 

@Autowired 
@Qualifier("PassManager") 
private PassManager pm; 

/*headers = { "Accept:application/json" }, 
consumes = MediaType.APPLICATION_JSON_VALUE,*/ 

@RequestMapping(value = "/createPass", method = RequestMethod.POST, 
     consumes = MediaType.APPLICATION_JSON_VALUE, 
     produces = MediaType.APPLICATION_OCTET_STREAM_VALUE) 
public @ResponseBody ByteArrayOutputStream createGiftPass(
     @RequestBody PassGenerationRequest request) throws IOException { 
    System.out.println("in createGiftPass() method"); 
    String success = "Success"; 
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    baos.write(success.getBytes()); 
    return baos; 
} 

@RequestMapping(value = "/test", method = RequestMethod.GET, 
     produces = MediaType.TEXT_PLAIN_VALUE) 
public @ResponseBody 
String test() throws IOException { 
    System.out.println("in test() method"); 
    return "Success"; 
} 
} 

我需要輸入JSON映射到以下POJO PassGenerationRequest

@JsonAutoDetect 
public class PassGenerationRequest { 

private String serialNumber; 
private String upc; 
private String campaign; 
private String merchant; 

public String getSerialNumber() { 
    return serialNumber; 
} 

public void setSerialNumber(String serialNumber) { 
    this.serialNumber = serialNumber; 
} 

public String getUpc() { 
    return upc; 
} 

public void setUpc(String upc) { 
    this.upc = upc; 
} 

public String getCampaign() { 
    return campaign; 
} 

public void setCampaign(String campaign) { 
    this.campaign = campaign; 
} 

public String getMerchant() { 
    return merchant; 
} 

public void setMerchant(String merchant) { 
    this.merchant = merchant; 
} 
} 

以下是在彈簧servlet.xml中配置的不同HttpMessageConverters

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> 
    <property name="messageConverters"> 
     <list> 
      <ref bean="jsonMessageConverter" /> 
      <ref bean="byteArrayMessageConverter"/> 
      <ref bean="stringMessageConverter"/> 
     </list> 
    </property> 

</bean> 

<bean id="jsonMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" > 
    <property name="supportedMediaTypes" value="application/json" /> 
</bean> 

<bean id="byteArrayMessageConverter" 
    class="org.springframework.http.converter.ByteArrayHttpMessageConverter" > 
    <property name="supportedMediaTypes" value="application/octet-stream" /> 
</bean> 

<bean id="stringMessageConverter" 
    class="org.springframework.http.converter.StringHttpMessageConverter" > 
    <property name="supportedMediaTypes" value="text/plain" /> 
</bean> 

目前我得到內容類型'text/plain;字符集= UTF-8'不支持異常。

如果我添加了頭= {「接受:應用/ JSON」}然後我得到異常說沒有處理程序爲請求找到「請求/ createPass」

誰能請在幫助我這裏?

謝謝。

+0

什麼是你的要求是什麼樣子? –

+0

我實際上是使用郵遞員應用程序發佈我的請求。 – user2985202

回答

1

確認您的請求已將Content-Type設置爲application/json

Accept描述了您想要在響應中看到的媒體類型。你已經爲二進制數據設置了,所以當你提供application/json來代替時,Spring看不到匹配。

+0

我正在使用Postman這是一個Chrome應用程序發佈我的請求。我將內容類型設置爲JSON,但我仍然遇到同樣的問題。我也嘗試通過CURL發佈。以下是我的CURL請求'curl -i -H「Content-Type:application/json」-X POST -d'{「serialNumber」:「1234」,「upc」:「12345」,「campaign」:「155950」 ,「merchant」:「ASDA」}'http:// localhost:8080/passkit-service-app-1.0/passkit/request/createPass' – user2985202

+0

即使我將頭信息包含爲'headers = {「Accept:application/octet-stream「}'如果我正在返回,我相信它是適用的ByteArrayOutputStream它給了我HTTP 404找不到資源 – user2985202

+0

Web應用程序的上下文是什麼?例如,也許它是'passkit'並且url應該是'http:// localhost:8080/passkit/request/createPass' – Vidya

1

確保傑克遜庫在類路徑信息轉換器MappingJacksonHttpMessageConverter是相對2先老傑克遜lib下,相對2後,你需要添加MappingJackson2HttpMessageConverter, 也ü可以刪除標註方法處理與簡單的「」,並與傑克遜的lib中類路徑,它會自動選擇你需要的消息轉換器。

0

使用本

<bean 
    class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> 
    <property name="messageConverters"> 
     <list> 
      <ref bean="jsonMessageConverter" /> 
     </list> 
    </property> 
</bean> 
相關問題