Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java HttpRequestHandlingMessagingGateway JSON数组负载_Java_Json_Spring_Jackson_Spring Integration - Fatal编程技术网

Java HttpRequestHandlingMessagingGateway JSON数组负载

Java HttpRequestHandlingMessagingGateway JSON数组负载,java,json,spring,jackson,spring-integration,Java,Json,Spring,Jackson,Spring Integration,我无法使用HTTP入站适配器将JSON数组转换为SendgridTxEvent类型的对象列表,它总是以ArrayList而不是list结束。配置: public HttpRequestHandlingMessagingGateway sendgridMessageAdapter(@Qualifier("sendgridWebhookEvents") MessageChannel channel) { HttpRequestHandlingMessagingGateway http

我无法使用HTTP入站适配器将JSON数组转换为
SendgridTxEvent
类型的对象列表,它总是以
ArrayList
而不是
list
结束。配置:

public HttpRequestHandlingMessagingGateway sendgridMessageAdapter(@Qualifier("sendgridWebhookEvents") MessageChannel channel) {
        HttpRequestHandlingMessagingGateway httpInboundChannelAdapter = new HttpRequestHandlingMessagingGateway(false);

        RequestMapping mapping = new RequestMapping();
        mapping.setMethods(HttpMethod.POST);
        mapping.setPathPatterns("/webhook/sendgrid");

        ParameterizedTypeReference<List<SendgridTxEvent>> ptr = new ParameterizedTypeReference<List<SendgridTxEvent>>() {
        };

        httpInboundChannelAdapter.setRequestMapping(mapping);
        httpInboundChannelAdapter.setRequestChannel(channel);
        httpInboundChannelAdapter.setRequestPayloadType(ResolvableType.forType(ptr));

        return httpInboundChannelAdapter;
    }

我在框架中提出了一个问题来解决这个问题:


同时,作为一种解决方法,我建议在
HttpRequestHandlingMessagingGateway
中预期有效负载为
String
byte[]
,然后使用POJO
@Transformer
下游,通过
ObjectMapper
直接转换,并且已经预期的
请发布其他文件。从json到对象文件的映射?@AlexLemesios添加了
SendgridTxEvent
。是的,从JSON到对象集合是否有SendgridTxEvent的包装器?像是一个集合的类吗?@AlexLemesios否。我认为我明确地将目标类型指定为
ParameterizedTypeReference(){}
。我想知道适配器为什么会忽略它。似乎
org.springframework.integration.http.inbound.HttpRequestHandlingEndpointSupport#extractRequestBody
没有保留调用
ResolvableType#resolve
的实际类型参数,因此http入站适配器不可能将JSON数组转换为所需类型。
@JsonIgnoreProperties(ignoreUnknown = true)
public class SendgridTxEvent {
    public enum Event {
        PROCESSED,
        DROPPED,
        DELIVERED,
        BOUNCE,
        DEFERRED,
        OPEN,
        CLICK,
        UNSUBSCRIBE,
        SPAMREPORT;

        @JsonCreator
        public static Event forValue(String value) {
            return Event.valueOf(value.toUpperCase());
        }
    }

    private String email;
    private Long timestamp;
    private Event event;

    @JsonFormat(with = JsonFormat.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
    private List<String> category;
    private String sgEventId;
    private String sgMessageId;

//getters, setters

}