axios带参请求-返回HTTP Status 400 -Required String parameter xxx is not present类型异常

本文介绍了解决前端使用axios向后端SpringBoot发送带参请求时出现的“HTTPStatus400-RequiredStringparameterxxxisnotpresent”异常问题。通过分析问题原因并调整后端参数接收方式,实现了正常的数据交互。

最近做一个博客项目,用axios向后端springboot发送带参请求一直报“HTTP Status 400 -Required String parameter xxx is not present类型异常”,经过一番研究,终于解决。

1.错误写法

前端axios请求函数:

import axios from 'axios'
export function postMd(value){
   return  axios.post('/saveMd', {
                        content: value
                     })
                     .then(function (response) {
                        console.log(response);
                     })
                     .catch(function (error) {
                        console.log(error);
                     });
}

前端vue具体请求:

<script>
//取得postMd函数
import {postMd} from '@/api/article'
export default {
   data(){
      return {
         value: '123',
      }
   },
   methods:{
      save(value){
      	//发送axios的post带参请求,content=value
         var result=postMd(value);
         console.log(result); 
      }
   }
}
</script>

后端springboot接收:

@RestController
public class ArticleController {
	//这里用"api"+"/saveMd"是在vue中用代理的方法解决了跨域问题,前面都要加/api
    @RequestMapping("/api/saveMd")
    public String saveMd(@RequestParam String content){
        System.out.println(content);
        return "okok";

    }
}

结果后台一直报错:

Required String parameter 'content' is not present

2.解决方法

分析了一下原因,原来用axios带参请求,前端传来的是json字符串,
在这里插入图片描述
难怪后台springboot 用@RequestParam获取不到,需要用@RequestBody接收。
后端做如下修改:

@RestController
public class ArticleController {

    @RequestMapping("/api/saveMd")
    					//注意用@RequestBody接收json格式参数
    public String saveMd(@RequestBody String content){
        System.out.println(content);
        return "okok";

    }
}

修改完后一切正常。
之后有一篇博文综合阐释了axios带参请求的前后端正确写法,参考如下:
https://www.cnblogs.com/nongzihong/p/12886684.html

2025-09-26 17:17:38.096 [reactor-http-nio-2] DEBUG reactor.netty.http.server.HttpServerOperations - [d7d66844, L:/0:0:0:0:0:0:0:1:9000 - R:/0:0:0:0:0:0:0:1:53739] New http connection, requesting read 2025-09-26 17:17:38.096 [reactor-http-nio-3] DEBUG reactor.netty.http.server.HttpServerOperations - [7dd8eb32, L:/0:0:0:0:0:0:0:1:9000 - R:/0:0:0:0:0:0:0:1:53740] New http connection, requesting read 2025-09-26 17:17:38.097 [reactor-http-nio-3] DEBUG reactor.netty.transport.TransportConfig - [7dd8eb32, L:/0:0:0:0:0:0:0:1:9000 - R:/0:0:0:0:0:0:0:1:53740] Initialized pipeline DefaultChannelPipeline{(reactor.left.httpCodec = io.netty.handler.codec.http.HttpServerCodec), (reactor.left.httpTrafficHandler = reactor.netty.http.server.HttpTrafficHandler), (reactor.right.reactiveBridge = reactor.netty.channel.ChannelOperationsHandler)} 2025-09-26 17:17:38.097 [reactor-http-nio-2] DEBUG reactor.netty.transport.TransportConfig - [d7d66844, L:/0:0:0:0:0:0:0:1:9000 - R:/0:0:0:0:0:0:0:1:53739] Initialized pipeline DefaultChannelPipeline{(reactor.left.httpCodec = io.netty.handler.codec.http.HttpServerCodec), (reactor.left.httpTrafficHandler = reactor.netty.http.server.HttpTrafficHandler), (reactor.right.reactiveBridge = reactor.netty.channel.ChannelOperationsHandler)} 2025-09-26 17:17:38.156 [reactor-http-nio-3] DEBUG reactor.netty.http.server.HttpServerOperations - [7dd8eb32, L:/0:0:0:0:0:0:0:1:9000 - R:/0:0:0:0:0:0:0:1:53740] Increasing pending responses, now 1 2025-09-26 17:17:38.196 [reactor-http-nio-3] DEBUG reactor.netty.http.server.HttpServer - [7dd8eb32-1, L:/0:0:0:0:0:0:0:1:9000 - R:/0:0:0:0:0:0:0:1:53740] Handler is being applied: org.springframework.http.server.reactive.ReactorHttpHandlerAdapter@496f5f3 2025-09-26 17:17:38.296 [reactor-http-nio-3] DEBUG o.s.web.server.adapter.HttpWebHandlerAdapter - [7dd8eb32-1] HTTP POST "/master/part/import/excel" 2025-09-26 17:17:38.347 [reactor-http-nio-3] DEBUG o.s.w.r.r.m.a.RequestMappingHandlerMapping - [7dd8eb32-1] Mapped to com.hvlink.controller.PartController#importPart(MultipartFile) 2025-09-26 17:17:38.457 [reactor-http-nio-3] DEBUG org.springframework.web.method.HandlerMethod - [7dd8eb32-1] Could not resolve parameter [0] in public com.hvlink.common.Result<com.hvlink.entity.vo.master.PartImportResultVO> com.hvlink.controller.PartController.importPart(org.springframework.web.multipart.MultipartFile): 400 BAD_REQUEST "Required MultipartFile parameter 'file' is not present" 2025-09-26 17:17:38.461 [reactor-http-nio-3] DEBUG o.s.w.r.r.m.a.RequestMappingHandlerAdapter - [7dd8eb32-1] Using @ExceptionHandler com.hvlink.exceptions.ExceptionHandle#handleException(Exception) 2025-09-26 17:17:38.488 [reactor-http-nio-3] ERROR com.hvlink.exceptions.ExceptionHandle - ===服务器内部错误== org.springframework.web.server.ServerWebInputException: 400 BAD_REQUEST "Required MultipartFile parameter 'file' is not present" at org.springframework.web.reactive.result.method.annotation.RequestParamMethodArgumentResolver.handleMissingValue(RequestParamMethodArgumentResolver.java:114) Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException: Assembly trace from producer [reactor.core.publisher.MonoSupplier] : reactor.core.publisher.Mono.fromSupplier(Mono.java:718) org.springframework.web.reactive.result.method.annotation.AbstractNamedValueArgumentResolver.getDefaultValue(AbstractNamedValueArgumentResolver.java:209) Error has been observed at the following site(s): *____Mono.fromSupplier ⇢ at org.springframework.web.reactive.result.method.annotation.AbstractNamedValueArgumentResolver.getDefaultValue(AbstractNamedValueArgumentResolver.java:209) *___Mono.switchIfEmpty ⇢ at org.springframework.web.reactive.result.method.annotation.AbstractNamedValueArgumentResolver.resolveArgument(AbstractNamedValueArgumentResolver.java:112) |_ Mono.defaultIfEmpty ⇢ at org.springframework.web.reactive.result.method.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:206) |_ Mono.doOnError ⇢ at org.springframework.web.reactive.result.method.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:207) *_____________Mono.zip ⇢ at org.springframework.web.reactive.result.method.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:214) |_ Mono.flatMap ⇢ at org.springframework.web.reactive.result.method.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:136) *___________Mono.defer ⇢ at org.springframework.web.reactive.result.method.annotation.RequestMappingHandlerAdapter.handle(RequestMappingHandlerAdapter.java:200) *____________Mono.then ⇢ at org.springframework.web.reactive.result.method.annotation.RequestMappingHandlerAdapter.handle(RequestMappingHandlerAdapter.java:200) |_ Mono.doOnNext ⇢ at org.springframework.web.reactive.result.method.annotation.RequestMappingHandlerAdapter.handle(RequestMappingHandlerAdapter.java:201) |_ Mono.doOnNext ⇢ at org.springframework.web.reactive.result.method.annotation.RequestMappingHandlerAdapter.handle(RequestMappingHandlerAdapter.java:202) Original Stack Trace: at org.springframework.web.reactive.result.method.annotation.RequestParamMethodArgumentResolver.handleMissingValue(RequestParamMethodArgumentResolver.java:114) at org.springframework.web.reactive.result.method.annotation.AbstractNamedValueArgumentResolver.lambda$getDefaultValue$1(AbstractNamedValueArgumentResolver.java:215) at reactor.core.publisher.MonoSupplier.subscribe(MonoSupplier.java:57) at reactor.core.publisher.Mono.subscribe(Mono.java:4490) at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onComplete(FluxSwitchIfEmpty.java:82) at reactor.core.publisher.Operators.complete(Operators.java:137) at reactor.core.publisher.FluxFlatMap.trySubscribeScalarMap(FluxFlatMap.java:145) at reactor.core.publisher.MonoFlatMap.subscribeOrReturn(MonoFlatMap.java:53) at reactor.core.publisher.Mono.subscribe(Mono.java:4475) at reactor.core.publisher.MonoZip.subscribe(MonoZip.java:129) at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:53) at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.subscribeNext(MonoIgnoreThen.java:240) at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onComplete(MonoIgnoreThen.java:203) at reactor.core.publisher.MonoFlatMap$FlatMapMain.onComplete(MonoFlatMap.java:181) at reactor.core.publisher.Operators.complete(Operators.java:137) at reactor.core.publisher.MonoZip.subscribe(MonoZip.java:121) at reactor.core.publisher.Mono.subscribe(Mono.java:4490) at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.subscribeNext(MonoIgnoreThen.java:263) at reactor.core.publisher.MonoIgnoreThen.subscribe(MonoIgnoreThen.java:51) at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:157) at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onNext(FluxSwitchIfEmpty.java:74) at reactor.core.publisher.MonoNext$NextSubscriber.onNext(MonoNext.java:82) at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.innerNext(FluxConcatMap.java:282) at reactor.core.publisher.FluxConcatMap$ConcatMapInner.onNext(FluxConcatMap.java:863) at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:129) at reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.onNext(MonoPeekTerminal.java:180) at reactor.core.publisher.Operators$ScalarSubscription.request(Operators.java:2400) at reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.request(MonoPeekTerminal.java:139) at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.request(FluxMapFuseable.java:171) at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.set(Operators.java:2196) at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.onSubscribe(Operators.java:2070) at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onSubscribe(FluxMapFuseable.java:96) at reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.onSubscribe(MonoPeekTerminal.java:152) at reactor.core.publisher.MonoJust.subscribe(MonoJust.java:55) at reactor.core.publisher.Mono.subscribe(Mono.java:4490) at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.drain(FluxConcatMap.java:451) at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.onSubscribe(FluxConcatMap.java:219) at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:201) at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:83) at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:53) at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:53) at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:53) at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:53) at reactor.core.publisher.Mono.subscribe(Mono.java:4490) at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.subscribeNext(MonoIgnoreThen.java:263) at reactor.core.publisher.MonoIgnoreThen.subscribe(MonoIgnoreThen.java:51) at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) at reactor.core.publisher.MonoDeferContextual.subscribe(MonoDeferContextual.java:55) at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) at reactor.netty.http.server.HttpServer$HttpServerHandle.onStateChange(HttpServer.java:1112) at reactor.netty.ReactorNetty$CompositeConnectionObserver.onStateChange(ReactorNetty.java:707) at reactor.netty.transport.ServerTransport$ChildObserver.onStateChange(ServerTransport.java:481) at reactor.netty.http.server.HttpServerOperations.onInboundNext(HttpServerOperations.java:626) at reactor.netty.channel.ChannelOperationsHandler.channelRead(ChannelOperationsHandler.java:114) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) at reactor.netty.http.server.HttpTrafficHandler.channelRead(HttpTrafficHandler.java:230) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:436) at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:346) at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:333) at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:454) at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:290) at io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:251) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:788) at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724) at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650) at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562) at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) at java.lang.Thread.run(Thread.java:750) 2025-09-26 17:17:38.498 [reactor-http-nio-3] DEBUG o.s.w.r.r.m.annotation.ResponseBodyResultHandler - [7dd8eb32-1] Using 'application/json' given [*/*] and supported [application/json, application/*+json, application/x-ndjson, text/event-stream] 2025-09-26 17:17:38.498 [reactor-http-nio-3] DEBUG o.s.w.r.r.m.annotation.ResponseBodyResultHandler - [7dd8eb32-1] 0..1 [com.hvlink.common.Result<?>] 2025-09-26 17:17:38.562 [reactor-http-nio-3] DEBUG o.s.http.codec.json.Jackson2JsonEncoder - [7dd8eb32-1] Encoding [Result(status=500, msg=发现未知问题,请联系管理员!, data=null, timestamp=1758878258493)] 2025-09-26 17:17:38.658 [reactor-http-nio-3] DEBUG reactor.netty.http.server.HttpServerOperations - [7dd8eb32-1, L:/0:0:0:0:0:0:0:1:9000 - R:/0:0:0:0:0:0:0:1:53740] Decreasing pending responses, now 0 2025-09-26 17:17:38.658 [reactor-http-nio-3] DEBUG reactor.netty.http.server.HttpServerOperations - [7dd8eb32-1, L:/0:0:0:0:0:0:0:1:9000 - R:/0:0:0:0:0:0:0:1:53740] Last HTTP packet was sent, terminating the channel 2025-09-26 17:17:38.659 [reactor-http-nio-3] DEBUG reactor.netty.channel.ChannelOperations - [7dd8eb32-1, L:/0:0:0:0:0:0:0:1:9000 - R:/0:0:0:0:0:0:0:1:53740] [HttpServer] Channel inbound receiver cancelled (operation cancelled). 2025-09-26 17:17:38.675 [reactor-http-nio-3] DEBUG o.s.web.server.adapter.HttpWebHandlerAdapter - [7dd8eb32-1] Completed 500 INTERNAL_SERVER_ERROR 2025-09-26 17:17:38.679 [reactor-http-nio-3] DEBUG reactor.netty.http.server.HttpServerOperations - [7dd8eb32-1, L:/0:0:0:0:0:0:0:1:9000 - R:/0:0:0:0:0:0:0:1:53740] Last HTTP response frame 2025-09-26 17:17:38.767 [reactor-http-nio-3] DEBUG reactor.netty.http.server.HttpServerOperations - [7dd8eb32-1, L:/0:0:0:0:0:0:0:1:9000 - R:/0:0:0:0:0:0:0:1:53740] Dropped HTTP content, since response has been sent already: CONTENT(decodeResult: success, content: PooledSlicedByteBuf(ridx: 0, widx: 1664, cap: 1664/1664, unwrapped: PooledUnsafeDirectByteBuf(ridx: 2048, widx: 2048, cap: 2048))) 2025-09-26 17:17:38.768 [reactor-http-nio-3] DEBUG reactor.netty.http.server.HttpServerOperations - [7dd8eb32, L:/0:0:0:0:0:0:0:1:9000 - R:/0:0:0:0:0:0:0:1:53740] Dropped HTTP content, since response has been sent already: CONTENT(decodeResult: success, content: PooledSlicedByteBuf(ridx: 0, widx: 8192, cap: 8192/8192, unwrapped: PooledUnsafeDirectByteBuf(ridx: 8192, widx: 9044, cap: 32768))) 2025-09-26 17:17:38.783 [reactor-http-nio-3] DEBUG reactor.netty.channel.ChannelOperationsHandler - [7dd8eb32, L:/0:0:0:0:0:0:0:1:9000 - R:/0:0:0:0:0:0:0:1:53740] No ChannelOperation attached. @PostMapping("/import/excel") public Result<PartImportResultVO> importPart(@RequestParam("file") MultipartFile file) { if (file == null || file.isEmpty()) { return Result.fail("上传的文件为空"); } log.info("收到文件: {}, 大小: {} bytes", file.getOriginalFilename(), file.getSize()); return partService.importPart(file); }
09-27
在发送 GET 请求时,如果 `firmwareName` 数未正确传递,后端会抛出类似 `Required String parameter 'firmwareName' is not present` 的错误。这通常是因为数未正确附加到请求中,或者数名拼写不一致导致的。 Axios 在处理 GET 请求时,通过 `params` 属性将数附加到 URL 的查询字符串中。若希望正确传递 `firmwareName`,需要确保在 Axios 请求配置中将该数包含在 `params` 对象中,并且数名与后端接收的名称完全一致。例如: ```javascript axios.get('/api/firmware', { params: { firmwareName: 'v1.0.0' } }) ``` 上述请求会生成 `/api/firmware?firmwareName=v1.0.0` 的 URL,确保数正确附加到请求中[^3]。 在后端(如 Spring Boot 应用)中,接收 GET 请求数的方式主要有两种: 1. 使用 `@RequestParam("firmwareName")` 注解接收单个数,适用于数数量较少的情况: ```java @GetMapping("/firmware") public Result getFirmware(@RequestParam("firmwareName") String firmwareName) { // 处理逻辑 return Res.ok(firmwareName); } ``` 2. 使用 `Map<String, Object>` 接收多个数,适用于数数量较多或不确定的情况: ```java @GetMapping("/firmware") public Result getFirmware(@RequestParam Map<String, Object> params) { String firmwareName = (String) params.get("firmwareName"); // 处理逻辑 return Res.ok(firmwareName); } ``` 如果后端抛出 `Required String parameter 'firmwareName' is not present` 异常,说明请求中未正确传递该数,或者数名拼写不一致。需要检查 Axios 请求中 `params` 对象的键名是否与后端 `@RequestParam` 注解中指定的名称一致[^3]。 此外,GET 请求的查询数长度受浏览器限制,通常建议不超过 2KB,因此不适合传递大量数据或敏感信息。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值