SpringbootJSON处理和跨域取得参数

SpringBoot需要跨域进行请求,可以增加一个配置类进行配置调整,如下代码所示。

package com.jsqj.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;

//配置允许跨域
@Configuration
public class CorsConfig {
    @Bean
    public CorsFilter corsFilter() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", buildConfig());
        return new CorsFilter(source);
    }

    private CorsConfiguration buildConfig() {
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        // 1允许任何域名使用
        corsConfiguration.addAllowedOrigin("*");
        // 2允许任何头
        corsConfiguration.addAllowedHeader("*");
        // 3允许任何方法(post、get等)
        corsConfiguration.addAllowedMethod("*");
        return corsConfiguration;
    }
}

因为使用Vue.js中配置的Axious API发起的POST请求时一个复杂请求(同时会发起一个option请求获取接口的通路状态),传输context为JSON格式,所以请求体包含的数据是Request Payload而不是From data,在Spring boot中不能直接处理,需要对JSON字符串进行处理。

request payload

JSON处理可以使用原生的JSON处理或者是使用Hu Tool提供的JSON处理内容,而参数的获取需要使用@RequestBody参数进行JSON对象的获取,如下代码所示。

    //    测试接口,随便写的
    @PostMapping("/test")
    public ResultInfo testVue(@RequestBody JSONObject jsonParam) {
        String username = jsonParam.getStr("username");
        System.out.println(username);
        //OperationRecord or = new OperationRecord();
        //or.recode(jsonParam.toString());
        return new ResultInfo(Status.REQUEST_PARAMETER_ERROR);
    }

链接