前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringFramework手动注册RequestMapping API

SpringFramework手动注册RequestMapping API

作者头像
SmileNicky
发布2021-07-14 14:59:53
6780
发布2021-07-14 14:59:53
举报
文章被收录于专栏:Nicky's blogNicky's blog

SpringFramework手动注册RequestMapping API接口

业务场景:最近遇到一个特殊需求,需要手动注册RequestMapping ,使用SpringFramework项目里的RequestMappingInfoHandlerMapping进行手动注册

代码语言:javascript
复制
package portal.configure;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.http.HttpStatus;
import org.springframework.social.connect.web.HttpSessionSessionStrategy;
import org.springframework.social.connect.web.SessionStrategy;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.context.request.ServletWebRequest;
import org.springframework.web.filter.OncePerRequestFilter;
import org.springframework.web.servlet.mvc.method.RequestMappingInfo;
import org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping;

import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;


@Configuration
@ConditionalOnExpression("${auth.isEnable : false}")
public class RequestMappingConfiguration {

    private SessionStrategy sessionStrategy = new HttpSessionSessionStrategy();

    @Autowired
    public void setRequestMapping(RequestMappingInfoHandlerMapping mapping)
            throws NoSuchMethodException {
        mapping.registerMapping(RequestMappingInfo
                .paths("/api/test").methods(RequestMethod.GET).build(), this, this.getClass().getMethod("reqMethod", HttpServletRequest.class, HttpServletResponse.class));
    }

    public void reqMethod(HttpServletRequest request, HttpServletResponse response) throws Exception {
        sessionStrategy.setAttribute(new ServletWebRequest(request), "userCode", "admin");
        response.setStatus(HttpStatus.OK.value());
        response.setCharacterEncoding("utf-8");
        response.setContentType (  "application/json; charset=utf-8");
        PrintWriter printWriter = response.getWriter();
        printWriter.write("{ \"status\":"+HttpStatus.OK.value()+", \"desc\":\""+ "api接口调用成功!" +"\"}");
        printWriter.flush();
    }

    @Bean
    @Primary
    public FilterRegistrationBean myFilterRegistration() {
        FilterRegistrationBean registration = new FilterRegistrationBean();
        registration.setFilter(new OncePerRequestFilter() {
            @Override
            protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
                String origin = request.getHeader("origin");
                if (StringUtils.isEmpty(origin)) {
                    origin = "*";
                }
                response.setHeader("Access-Control-Allow-Origin", origin);
                response.setHeader("Access-Control-Allow-Credentials", "true");

                filterChain.doFilter(request, response);
            }
        });
        registration.addUrlPatterns("/api");

        return registration;
    }

}

linux环境测试api接口

代码语言:javascript
复制
[www@localhost ~]$ curl http://127.0.0.1:8080/api/test
{ "status":200, "desc":"api接口调用成功!"}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-07-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档