All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.mxixm.fastboot.weixin.mvc.advice.WxMediaResponseBodyAdvice Maven / Gradle / Ivy

The newest version!
package com.mxixm.fastboot.weixin.mvc.advice;

import com.mxixm.fastboot.weixin.exception.WxAppException;
import com.mxixm.fastboot.weixin.module.media.WxMediaResource;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.core.MethodParameter;
import org.springframework.core.Ordered;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.ResourceHttpMessageConverter;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;

import java.io.IOException;
import java.lang.invoke.MethodHandles;

/**
 * ResponseBodyAdvice Spring 4.1以上才支持。
 * 这个作用是为响应自动添加fromUser
 * 不加这个注解会有问题@ControllerAdvice,不识别
 *
 * @author Guangshan
 * @since 2017年8月15日
 */
@ControllerAdvice
public class WxMediaResponseBodyAdvice implements ResponseBodyAdvice, Ordered {

    private static final Log logger = LogFactory.getLog(MethodHandles.lookup().lookupClass());

    @Override
    public int getOrder() {
        return Ordered.LOWEST_PRECEDENCE - 100000;
    }

    @Override
    public boolean supports(MethodParameter returnType,
                            Class> converterType) {
        return ResourceHttpMessageConverter.class.isAssignableFrom(converterType) &&
                WxMediaResource.class.isAssignableFrom(returnType.getParameterType());
    }

    @Override
    public WxMediaResource beforeBodyWrite(WxMediaResource body, MethodParameter returnType,
                                  MediaType selectedContentType, Class> selectedConverterType,
                                  ServerHttpRequest request, ServerHttpResponse response) {
        if (!body.isUrlMedia()) {
            return body;
        }
        try {
            response.getHeaders().setLocation(body.getURI());
            response.setStatusCode(HttpStatus.FOUND);
            return null;
        } catch (IOException e) {
            throw new WxAppException("系统异常");
        }
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy