2013-11-15 30 views
5

Spring Restful Web Hizmetime JSON girişini kabul etmek için çok zamanım var. Temelde amacım bir JSON'u kabul etmek ve bir zip dosyasını geri göndermektir. Ama ben ilk adımı geçemiyorum. aşağıdakı Spring Restful Web Hizmeti'nde JSON girişini Kabul Etme?

@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; 
} 
} 

yay servlet.xml yapılandırılmış farklı HttpMessageConverters olan aşağıdakı PassGenerationRequest

@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"; 
} 
} 

I pojo aşağıdaki girdi JSON eşlemek için gereken kontrol kodu

<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> 

Şu anda alıyorum İçerik türü 'text/plain; charset = UTF-8 'desteklenmiyor istisnası.

ben eklerseniz = { "Kabul: application/json"} başlık yok işleyici isteği "istek/createPass" için bulunan sonra olsun istisna diyerek

kimse bana üzerinde yardım edebilir İşte?

Teşekkürler.

+0

Ne isteğiniz neye benziyor? –

+0

Aslında isteğimi göndermek için Postman uygulamasını kullanıyordum. – user2985202

cevap

1

Content-Type isteğinizin application/json olarak ayarlandığını doğrulayın.

Accept, yanıtında görmek istediğiniz ortam türünü açıklar. Bu ikili veri için ayarladığınız var, bu yüzden application/json sağladığınızda, Spring bir eşleşme görmez.

+0

İsteklerimi göndermek için bir Chrome uygulaması olan Postman kullanıyordum. İçerik türünü JSON olarak ayarlıyorum, hala aynı sorunu yaşıyorum. CURL üzerinden de göndermeyi denedim. Aşağıda benim CURL isteğim "curl -i-H" İçerik-Tipi: uygulama/json "-X POST -d '{" serialNumber ":" 1234 "," upc ":" 12345 "," kampanya ":" 155950 " , "tüccar": "ASDA"} 'http: // localhost: 8080/passkit-service-app-1.0/passkit/istek/createPass' – user2985202

+0

Başlık bilgilerini' headers = {"Accept: application/octet-stream "}' Ben ByteArrayOutputStream döndürdüğümde uygulanabilir olduğuna inanıyorum bana bir kaynak bulunamadı HTTP 404 – user2985202

+0

Web uygulamanızın içeriği nedir? Örneğin, belki 'passkit' ve url 'http: // localhost: 8080/passkit/request/createPass' olmalıdır. – Vidya

1

emin Jackson kütüphanesini olun sınıf yolu Mesaj dönüştürücü MappingJacksonHttpMessageConverter olan rel 2 sonra, Ayrıca u "basit ile ek açıklama yöntemi işleyicisi kaldırmak" ve jackson lib ile yapabilirsiniz MappingJackson2HttpMessageConverter eklemem gerekiyor, rel 2 önce eski jackson lib içindir sınıf yolu, gerekli mesaj dönüştürücüyü otomatik olarak seçecektir.

0

kullanımı bu

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