2

わかりました、ここに戻って解決策を見つけます。

postForEntityインスタンスの Collection を送信するSpring RestTemplate メソッドを試しています。Springを試行すると Appriciate エラーが発生しますorg.springframework.http.converter.HttpMessageNotWritableException: Could not write request: no suitable HttpMessageConverter found for request type [com.abc.base.domai n.dto.gift.GiftItemList。誰かが Spring resttemplate POST メソッドを使用して ArrayList を送信する方法を教えてくれれば。

RestTemplate Bean:

 <bean id="restTemplate" class="org.springframework.web.client.RestTemplate">
   <constructor-arg ref="httpClientFactory"/> 
    <property name="messageConverters">
        <list>
            <bean class="org.springframework.http.converter.FormHttpMessageConverter" />
            <bean class="org.springframework.http.converter.StringHttpMessageConverter" /> 
            <bean id="jsonViewResolver" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" >
               <property name="objectMapper">
                    <ref bean="JacksonObjectMapper" />
               </property>              
               <property name="supportedMediaTypes">
                          <list>
                            <bean class="org.springframework.http.MediaType">
                               <constructor-arg value="application" />
                               <constructor-arg value="json" />
                               <constructor-arg value="#{T(java.nio.charset.Charset).forName('UTF-8')}"/>
                             </bean>
                          </list>
                </property>
            </bean>                                             
        </list>
    </property>
</bean>
<bean id="JacksonObjectMapper" class="org.codehaus.jackson.map.ObjectMapper" />

 <bean id="httpClient" class="org.apache.commons.httpclient.HttpClient">
    <constructor-arg ref="httpClientParams"/>
</bean>

 <bean id="httpClientParams" class="org.apache.commons.httpclient.params.HttpClientParams">        
    <property name="connectionManagerClass"  value="org.apache.commons.httpclient.MultiThreadedHttpConnectionManager"/>
</bean>

<bean id="httpClientFactory" class="org.springframework.http.client.CommonsClientHttpRequestFactory">
    <constructor-arg ref="httpClient"/>
</bean>

POSTしようとしているインスタンス、

 public class GiftItem implements Entity, Serializable {    

    private static final long serialVersionUID = 1L;

    private String redeemLocation;  
    private String itemName;    
    private String itemDescription; 
    private String merchantName;    
    private Integer quantity;   
    private Integer imageId;


    public GiftItem() {
        super();        
    }

    //with getters and setters

}

GiftItem インスタンス ラッパー クラス

    public class GiftItemList implements Serializable {

    private static final long serialVersionUID = -8202204714984099030L;

    public GiftItemList() {

    }

    private List<GiftItem> giftItemList;

    public List<GiftItem> getGiftItemList() {
        return giftItemList;
    }

    public void setGiftItemList(List<GiftItem> giftItemList) {
        this.giftItemList = giftItemList;
    }
}

これが私がそれを使用する方法です、

public BaseResponse sendGiftEmail(final String token, final User sender,final String message, final GiftItemList giftItemList) {

    MultiValueMap<String, Object> map = new LinkedMultiValueMap<String, Object>();
    map.add("token", token);        
    map.add("sender", sender);
    map.add("message", message);
    map.add("giftItemList", giftItemList);
    return getRestTemplate().postForEntity(
            "http://localhost:8080/notification/api/notification/send_gift_email",
    map, BaseResponse.class).getBody();
}

そして私が得ているエラー、

    org.springframework.http.converter.HttpMessageNotWritableException: Could not write request: no suitable HttpMessageConverter found for request type [com.abc.base.domain.dto.gift.GiftItemList]
   at org.springframework.http.converter.FormHttpMessageConverter.write Part(FormHttpMessageConverter.java:310)
   at org.springframework.http.converter.FormHttpMessageConverter.write Parts(FormHttpMessageConverter.java:270)
   at org.springframework.http.converter.FormHttpMessageConverter.write Multipart(FormHttpMessageConverter.java:260)
   at org.springframework.http.converter.FormHttpMessageConverter.write(FormHttpMessageConverter.java:200)
   at org.springframework.http.converter.FormHttpMessageConverter.write(FormHttpMessageConverter.java:1)
   at org.springframework.web.client.RestTemplate$HttpEntityRequestCallback.doWithRequest(RestTemplate.java:588)
   at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:436)
   at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:401)
   at org.springframework.web.client.RestTemplate.postForEntity(RestTemplate.java:302)
   at com.tapgift.gift.client.impl.GiftClientImpl.sendGiftNotifications(GiftClientImpl.java:101)

ポンポン:

<dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-mapper-asl</artifactId>
        <version>1.9.2</version>
    </dependency>

レシーバーコントローラーを忘れそうになり、

    @RequestMapping(value = "/notification/send_gift_email", method = RequestMethod.POST)
    public @ResponseBody BaseResponse sendGiftEmail(@RequestParam("token") String token,     @RequestParam("sender")final User sender, @RequestParam("message")final String message,@RequestParam("giftItemList") GiftItemList giftItemList) {

}
4

1 に答える 1

0

MessageCoverter に MappingJacksonHttpMessageConveter を追加する必要があります。

 List<HttpMessageConverter<?>> messageConverters = new ArrayList<HttpMessageConverter<?>>();
messageConverters.add(new FormHttpMessageConverter());
messageConverters.add(new StringHttpMessageConverter());
messageConverters.add(new MappingJacksonHttpMessageConverter());
restTemplate = new RestTemplate();

restTemplate.setMessageConverters(messageConverters);

次の依存関係も追加する必要があります。

jackson-core-asl-x.x.x.jar & jaackson.mapper.asl-x.x.x.jar

もう 1 つのことは、クラスが JSON プロパティと同じ属性を持っていることを確認する必要があることです。例えば ​​:

{"data":{"ticket":"TICKET_870299cf98e227abdbd5f9b7064390c5723a0c6a"}}

クラス プロパティを埋めるには、次のようにする必要があります。

person.java

public class person {

 private Data data;

 public Data getData() {
 return data;
 }

 public void setData(Data data) {
   this.data = data;
 }
}

データ.java

public class Data {

 private String ticket;

 public String getTicket() {
   return ticket;
 }

 public void setTicket(String ticket) {
   this.ticket = ticket;
 }

}

最後に、アプリケーションに次を追加します。

  person entity = restTemplate.postForObject(url, requestEntity,
    person.class);

requestEntity は、リクエスト本文 (私の場合は JSON) を含む文字列です。

それが役に立ったことを願っています!

于 2014-03-26T11:09:12.437 に答える