spring-mybatis整合sql映射文件xxx.xml

本文介绍了如何使用Mybatis的Mapper接口进行基本操作,展示了如何通过`com.jt.mapper.UserMapper`获取demo_user表中的所有数据。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jt.mapper.UserMapper">
    <select id="getAll" resultType="User">
        select * from demo_user
    </select>
</mapper>

2025-09-23 17:45:21.057 [reactor-http-nio-6] DEBUG reactor.netty.http.server.HttpServerOperations - [5337afd7, L:/192.168.10.122:9000 - R:/192.168.10.122:61869] New http connection, requesting read 2025-09-23 17:45:21.057 [reactor-http-nio-7] DEBUG reactor.netty.http.server.HttpServerOperations - [d4ca6b17, L:/192.168.10.122:9000 - R:/192.168.10.122:61870] New http connection, requesting read 2025-09-23 17:45:21.057 [reactor-http-nio-6] DEBUG reactor.netty.transport.TransportConfig - [5337afd7, L:/192.168.10.122:9000 - R:/192.168.10.122:61869] 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-23 17:45:21.057 [reactor-http-nio-7] DEBUG reactor.netty.transport.TransportConfig - [d4ca6b17, L:/192.168.10.122:9000 - R:/192.168.10.122:61870] 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-23 17:45:21.058 [reactor-http-nio-7] DEBUG reactor.netty.http.server.HttpServerOperations - [d4ca6b17, L:/192.168.10.122:9000 - R:/192.168.10.122:61870] Increasing pending responses, now 1 2025-09-23 17:45:21.059 [reactor-http-nio-6] DEBUG reactor.netty.http.server.HttpServerOperations - [5337afd7, L:/192.168.10.122:9000 - R:/192.168.10.122:61869] Increasing pending responses, now 1 2025-09-23 17:45:21.059 [reactor-http-nio-7] DEBUG reactor.netty.http.server.HttpServer - [d4ca6b17-1, L:/192.168.10.122:9000 - R:/192.168.10.122:61870] Handler is being applied: org.springframework.http.server.reactive.ReactorHttpHandlerAdapter@44b58719 2025-09-23 17:45:21.059 [reactor-http-nio-6] DEBUG reactor.netty.http.server.HttpServer - [5337afd7-1, L:/192.168.10.122:9000 - R:/192.168.10.122:61869] Handler is being applied: org.springframework.http.server.reactive.ReactorHttpHandlerAdapter@44b58719 2025-09-23 17:45:21.059 [reactor-http-nio-7] DEBUG o.s.web.server.adapter.HttpWebHandlerAdapter - [d4ca6b17-5] HTTP POST "/master/shipper/query" 2025-09-23 17:45:21.059 [reactor-http-nio-6] DEBUG o.s.web.server.adapter.HttpWebHandlerAdapter - [5337afd7-6] HTTP POST "/master/shipper/query" 2025-09-23 17:45:21.059 [reactor-http-nio-7] DEBUG o.s.w.r.r.m.a.RequestMappingHandlerMapping - [d4ca6b17-5] Mapped to com.hvlink.controller.ShipperController#getShipper(ShipperParam) 2025-09-23 17:45:21.060 [reactor-http-nio-7] DEBUG o.s.w.r.r.m.a.RequestBodyMethodArgumentResolver - [d4ca6b17-5] Content-Type:application/json 2025-09-23 17:45:21.060 [reactor-http-nio-7] DEBUG o.s.w.r.r.m.a.RequestBodyMethodArgumentResolver - [d4ca6b17-5] 0..1 [com.hvlink.entity.param.master.ShipperParam] 2025-09-23 17:45:21.060 [reactor-http-nio-6] DEBUG o.s.w.r.r.m.a.RequestMappingHandlerMapping - [5337afd7-6] Mapped to com.hvlink.controller.ShipperController#getShipper(ShipperParam) 2025-09-23 17:45:21.060 [reactor-http-nio-7] DEBUG reactor.netty.channel.FluxReceive - [d4ca6b17-1, L:/192.168.10.122:9000 - R:/192.168.10.122:61870] [terminated=false, cancelled=false, pending=0, error=null]: subscribing inbound receiver 2025-09-23 17:45:21.060 [reactor-http-nio-6] DEBUG o.s.w.r.r.m.a.RequestBodyMethodArgumentResolver - [5337afd7-6] Content-Type:application/json 2025-09-23 17:45:21.060 [reactor-http-nio-6] DEBUG o.s.w.r.r.m.a.RequestBodyMethodArgumentResolver - [5337afd7-6] 0..1 [com.hvlink.entity.param.master.ShipperParam] 2025-09-23 17:45:21.060 [reactor-http-nio-7] DEBUG o.s.http.codec.json.Jackson2JsonDecoder - [d4ca6b17-5] Decoded [ShipperParam(id=null, companyCode=null, supplierCode=null, supplierName=null, shipperName=null, isDe (truncated)...] 2025-09-23 17:45:21.061 [reactor-http-nio-6] DEBUG reactor.netty.channel.FluxReceive - [5337afd7-1, L:/192.168.10.122:9000 - R:/192.168.10.122:61869] [terminated=false, cancelled=false, pending=0, error=null]: subscribing inbound receiver 2025-09-23 17:45:21.061 [reactor-http-nio-7] DEBUG org.mybatis.spring.SqlSessionUtils - Creating a new SqlSession 2025-09-23 17:45:21.061 [reactor-http-nio-7] DEBUG org.mybatis.spring.SqlSessionUtils - SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@20f5e83a] was not registered for synchronization because synchronization is not active 2025-09-23 17:45:21.061 [reactor-http-nio-6] DEBUG o.s.http.codec.json.Jackson2JsonDecoder - [5337afd7-6] Decoded [ShipperParam(id=null, companyCode=null, supplierCode=null, supplierName=null, shipperName=null, isDe (truncated)...] 2025-09-23 17:45:21.061 [reactor-http-nio-6] DEBUG org.mybatis.spring.SqlSessionUtils - Creating a new SqlSession 2025-09-23 17:45:21.061 [reactor-http-nio-6] DEBUG org.mybatis.spring.SqlSessionUtils - SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6bbfbaad] was not registered for synchronization because synchronization is not active 2025-09-23 17:45:21.071 [reactor-http-nio-7] DEBUG o.springframework.jdbc.datasource.DataSourceUtils - Fetching JDBC Connection from DataSource 2025-09-23 17:45:21.075 [reactor-http-nio-6] DEBUG o.springframework.jdbc.datasource.DataSourceUtils - Fetching JDBC Connection from DataSource 2025-09-23 17:45:21.193 [reactor-http-nio-6] DEBUG o.m.spring.transaction.SpringManagedTransaction - JDBC Connection [ConnectionID:3 ClientConnectionId: 7a9d2d6c-177a-4fab-a89f-958a3af6a3a5] will not be managed by Spring 2025-09-23 17:45:21.193 [reactor-http-nio-7] DEBUG o.m.spring.transaction.SpringManagedTransaction - JDBC Connection [ConnectionID:1 ClientConnectionId: 97cfcb9b-e9a5-41d0-b623-33fa9f4f4719] will not be managed by Spring 2025-09-23 17:45:21.194 [reactor-http-nio-6] DEBUG c.h.mapper.master.ShipperMapper.getShipper_mpCount - ==> Preparing: SELECT COUNT(*) FROM (SELECT DISTINCT t.id, s.id AS supplier_id, t.supplier_code, s.supplier_name, t.shipper_name, t.is_default, t.create_time FROM tm_shipper t LEFT JOIN tm_supplier s ON s.supplier_code = t.supplier_code) TOTAL 2025-09-23 17:45:21.194 [reactor-http-nio-7] DEBUG c.h.mapper.master.ShipperMapper.getShipper_mpCount - ==> Preparing: SELECT COUNT(*) FROM (SELECT DISTINCT t.id, s.id AS supplier_id, t.supplier_code, s.supplier_name, t.shipper_name, t.is_default, t.create_time FROM tm_shipper t LEFT JOIN tm_supplier s ON s.supplier_code = t.supplier_code) TOTAL 2025-09-23 17:45:21.194 [reactor-http-nio-6] DEBUG c.h.mapper.master.ShipperMapper.getShipper_mpCount - ==> Parameters: 2025-09-23 17:45:21.194 [reactor-http-nio-7] DEBUG c.h.mapper.master.ShipperMapper.getShipper_mpCount - ==> Parameters: 2025-09-23 17:45:21.289 [reactor-http-nio-7] DEBUG c.h.mapper.master.ShipperMapper.getShipper_mpCount - <== Total: 1 2025-09-23 17:45:21.290 [reactor-http-nio-7] DEBUG com.hvlink.mapper.master.ShipperMapper.getShipper - ==> Preparing: SELECT DISTINCT t.id, s.id as supplier_id, t.supplier_code, s.supplier_name, t.shipper_name, t.is_default, t.create_time FROM tm_shipper t LEFT JOIN tm_supplier s ON s.supplier_code = t.supplier_code ORDER BY t.create_time DESC OFFSET ? ROWS FETCH NEXT ? ROWS ONLY 2025-09-23 17:45:21.290 [reactor-http-nio-7] DEBUG com.hvlink.mapper.master.ShipperMapper.getShipper - ==> Parameters: 0(Long), 10(Long) 2025-09-23 17:45:21.294 [reactor-http-nio-6] DEBUG c.h.mapper.master.ShipperMapper.getShipper_mpCount - <== Total: 1 2025-09-23 17:45:21.295 [reactor-http-nio-6] DEBUG com.hvlink.mapper.master.ShipperMapper.getShipper - ==> Preparing: SELECT DISTINCT t.id, s.id as supplier_id, t.supplier_code, s.supplier_name, t.shipper_name, t.is_default, t.create_time FROM tm_shipper t LEFT JOIN tm_supplier s ON s.supplier_code = t.supplier_code ORDER BY t.create_time DESC OFFSET ? ROWS FETCH NEXT ? ROWS ONLY 2025-09-23 17:45:21.295 [reactor-http-nio-6] DEBUG com.hvlink.mapper.master.ShipperMapper.getShipper - ==> Parameters: 0(Long), 10(Long) 2025-09-23 17:45:21.392 [reactor-http-nio-7] DEBUG com.hvlink.mapper.master.ShipperMapper.getShipper - <== Total: 10 2025-09-23 17:45:21.392 [reactor-http-nio-6] DEBUG com.hvlink.mapper.master.ShipperMapper.getShipper - <== Total: 10 2025-09-23 17:45:21.392 [reactor-http-nio-7] DEBUG org.mybatis.spring.SqlSessionUtils - Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@20f5e83a] 2025-09-23 17:45:21.392 [reactor-http-nio-6] DEBUG org.mybatis.spring.SqlSessionUtils - Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6bbfbaad] 2025-09-23 17:45:21.392 [reactor-http-nio-6] DEBUG o.s.w.r.r.m.annotation.ResponseBodyResultHandler - [5337afd7-6] Using 'application/json' given [application/json, text/plain, */*] and supported [application/json, application/*+json, application/x-ndjson, text/event-stream] 2025-09-23 17:45:21.392 [reactor-http-nio-7] DEBUG o.s.w.r.r.m.annotation.ResponseBodyResultHandler - [d4ca6b17-5] Using 'application/json' given [application/json, text/plain, */*] and supported [application/json, application/*+json, application/x-ndjson, text/event-stream] 2025-09-23 17:45:21.392 [reactor-http-nio-6] DEBUG o.s.w.r.r.m.annotation.ResponseBodyResultHandler - [5337afd7-6] 0..1 [com.hvlink.common.Result<com.hvlink.pagination.PageResult<com.hvlink.entity.vo.master.ShipperVO>>] 2025-09-23 17:45:21.392 [reactor-http-nio-7] DEBUG o.s.w.r.r.m.annotation.ResponseBodyResultHandler - [d4ca6b17-5] 0..1 [com.hvlink.common.Result<com.hvlink.pagination.PageResult<com.hvlink.entity.vo.master.ShipperVO>>] 2025-09-23 17:45:21.393 [reactor-http-nio-7] DEBUG o.s.http.codec.json.Jackson2JsonEncoder - [d4ca6b17-5] Encoding [Result(status=200, msg=成功, data=PageResult(total=280, records=[ShipperVO(id=41, SupplierId=null, sup (truncated)...] 2025-09-23 17:45:21.393 [reactor-http-nio-6] DEBUG o.s.http.codec.json.Jackson2JsonEncoder - [5337afd7-6] Encoding [Result(status=200, msg=成功, data=PageResult(total=280, records=[ShipperVO(id=41, SupplierId=null, sup (truncated)...] 2025-09-23 17:45:21.394 [reactor-http-nio-7] DEBUG reactor.netty.http.server.HttpServerOperations - [d4ca6b17-1, L:/192.168.10.122:9000 - R:/192.168.10.122:61870] Detected non persistent http connection, preparing to close 2025-09-23 17:45:21.394 [reactor-http-nio-6] DEBUG reactor.netty.http.server.HttpServerOperations - [5337afd7-1, L:/192.168.10.122:9000 - R:/192.168.10.122:61869] Detected non persistent http connection, preparing to close 2025-09-23 17:45:21.394 [reactor-http-nio-7] DEBUG reactor.netty.http.server.HttpServerOperations - [d4ca6b17-1, L:/192.168.10.122:9000 - R:/192.168.10.122:61870] Last HTTP packet was sent, terminating the channel 2025-09-23 17:45:21.394 [reactor-http-nio-6] DEBUG reactor.netty.http.server.HttpServerOperations - [5337afd7-1, L:/192.168.10.122:9000 - R:/192.168.10.122:61869] Last HTTP packet was sent, terminating the channel 2025-09-23 17:45:21.394 [reactor-http-nio-7] DEBUG reactor.netty.channel.ChannelOperations - [d4ca6b17-1, L:/192.168.10.122:9000 - R:/192.168.10.122:61870] [HttpServer] Channel inbound receiver cancelled (operation cancelled). 2025-09-23 17:45:21.394 [reactor-http-nio-6] DEBUG reactor.netty.channel.ChannelOperations - [5337afd7-1, L:/192.168.10.122:9000 - R:/192.168.10.122:61869] [HttpServer] Channel inbound receiver cancelled (operation cancelled). 2025-09-23 17:45:21.396 [reactor-http-nio-7] DEBUG o.s.web.server.adapter.HttpWebHandlerAdapter - [d4ca6b17-5] Completed 200 OK 2025-09-23 17:45:21.396 [reactor-http-nio-6] DEBUG o.s.web.server.adapter.HttpWebHandlerAdapter - [5337afd7-6] Completed 200 OK 2025-09-23 17:45:21.507 [reactor-http-nio-8] DEBUG reactor.netty.http.server.HttpServerOperations - [61a722e4, L:/192.168.10.122:9000 - R:/192.168.10.122:61871] New http connection, requesting read 2025-09-23 17:45:21.507 [reactor-http-nio-8] DEBUG reactor.netty.transport.TransportConfig - [61a722e4, L:/192.168.10.122:9000 - R:/192.168.10.122:61871] 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-23 17:45:21.509 [reactor-http-nio-8] DEBUG reactor.netty.http.server.HttpServerOperations - [61a722e4, L:/192.168.10.122:9000 - R:/192.168.10.122:61871] Increasing pending responses, now 1 2025-09-23 17:45:21.509 [reactor-http-nio-8] DEBUG reactor.netty.http.server.HttpServer - [61a722e4-1, L:/192.168.10.122:9000 - R:/192.168.10.122:61871] Handler is being applied: org.springframework.http.server.reactive.ReactorHttpHandlerAdapter@44b58719 2025-09-23 17:45:21.509 [reactor-http-nio-8] DEBUG o.s.web.server.adapter.HttpWebHandlerAdapter - [61a722e4-7] HTTP POST "/master/shipper/query" 2025-09-23 17:45:21.510 [reactor-http-nio-8] DEBUG o.s.w.r.r.m.a.RequestMappingHandlerMapping - [61a722e4-7] Mapped to com.hvlink.controller.ShipperController#getShipper(ShipperParam) 2025-09-23 17:45:21.510 [reactor-http-nio-8] DEBUG o.s.w.r.r.m.a.RequestBodyMethodArgumentResolver - [61a722e4-7] Content-Type:application/json 2025-09-23 17:45:21.510 [reactor-http-nio-8] DEBUG o.s.w.r.r.m.a.RequestBodyMethodArgumentResolver - [61a722e4-7] 0..1 [com.hvlink.entity.param.master.ShipperParam] 2025-09-23 17:45:21.510 [reactor-http-nio-8] DEBUG reactor.netty.channel.FluxReceive - [61a722e4-1, L:/192.168.10.122:9000 - R:/192.168.10.122:61871] [terminated=false, cancelled=false, pending=0, error=null]: subscribing inbound receiver 2025-09-23 17:45:21.511 [reactor-http-nio-8] DEBUG o.s.http.codec.json.Jackson2JsonDecoder - [61a722e4-7] Decoded [ShipperParam(id=null, companyCode=null, supplierCode=null, supplierName=, shipperName=, isDefault=nu (truncated)...] 2025-09-23 17:45:21.511 [reactor-http-nio-8] DEBUG org.mybatis.spring.SqlSessionUtils - Creating a new SqlSession 2025-09-23 17:45:21.511 [reactor-http-nio-8] DEBUG org.mybatis.spring.SqlSessionUtils - SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@249d03d5] was not registered for synchronization because synchronization is not active 2025-09-23 17:45:21.516 [reactor-http-nio-8] DEBUG o.springframework.jdbc.datasource.DataSourceUtils - Fetching JDBC Connection from DataSource 2025-09-23 17:45:21.517 [reactor-http-nio-8] DEBUG o.m.spring.transaction.SpringManagedTransaction - JDBC Connection [ConnectionID:3 ClientConnectionId: 7a9d2d6c-177a-4fab-a89f-958a3af6a3a5] will not be managed by Spring 2025-09-23 17:45:21.517 [reactor-http-nio-8] DEBUG c.h.mapper.master.ShipperMapper.getShipper_mpCount - ==> Preparing: SELECT COUNT(*) FROM (SELECT DISTINCT t.id, s.id AS supplier_id, t.supplier_code, s.supplier_name, t.shipper_name, t.is_default, t.create_time FROM tm_shipper t LEFT JOIN tm_supplier s ON s.supplier_code = t.supplier_code) TOTAL 2025-09-23 17:45:21.517 [reactor-http-nio-8] DEBUG c.h.mapper.master.ShipperMapper.getShipper_mpCount - ==> Parameters: 2025-09-23 17:45:21.693 [reactor-http-nio-8] DEBUG c.h.mapper.master.ShipperMapper.getShipper_mpCount - <== Total: 1 2025-09-23 17:45:21.694 [reactor-http-nio-8] DEBUG com.hvlink.mapper.master.ShipperMapper.getShipper - ==> Preparing: SELECT DISTINCT t.id, s.id as supplier_id, t.supplier_code, s.supplier_name, t.shipper_name, t.is_default, t.create_time FROM tm_shipper t LEFT JOIN tm_supplier s ON s.supplier_code = t.supplier_code ORDER BY t.create_time DESC OFFSET ? ROWS FETCH NEXT ? ROWS ONLY 2025-09-23 17:45:21.694 [reactor-http-nio-8] DEBUG com.hvlink.mapper.master.ShipperMapper.getShipper - ==> Parameters: 0(Long), 10(Long) 2025-09-23 17:45:21.787 [reactor-http-nio-8] DEBUG com.hvlink.mapper.master.ShipperMapper.getShipper - <== Total: 10 2025-09-23 17:45:21.787 [reactor-http-nio-8] DEBUG org.mybatis.spring.SqlSessionUtils - Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@249d03d5] 2025-09-23 17:45:21.788 [reactor-http-nio-8] DEBUG o.s.w.r.r.m.annotation.ResponseBodyResultHandler - [61a722e4-7] Using 'application/json' given [application/json, text/plain, */*] and supported [application/json, application/*+json, application/x-ndjson, text/event-stream] 2025-09-23 17:45:21.788 [reactor-http-nio-8] DEBUG o.s.w.r.r.m.annotation.ResponseBodyResultHandler - [61a722e4-7] 0..1 [com.hvlink.common.Result<com.hvlink.pagination.PageResult<com.hvlink.entity.vo.master.ShipperVO>>] 2025-09-23 17:45:21.788 [reactor-http-nio-8] DEBUG o.s.http.codec.json.Jackson2JsonEncoder - [61a722e4-7] Encoding [Result(status=200, msg=成功, data=PageResult(total=280, records=[ShipperVO(id=41, SupplierId=null, sup (truncated)...] 2025-09-23 17:45:21.789 [reactor-http-nio-8] DEBUG reactor.netty.http.server.HttpServerOperations - [61a722e4-1, L:/192.168.10.122:9000 - R:/192.168.10.122:61871] Detected non persistent http connection, preparing to close 2025-09-23 17:45:21.790 [reactor-http-nio-8] DEBUG reactor.netty.http.server.HttpServerOperations - [61a722e4-1, L:/192.168.10.122:9000 - R:/192.168.10.122:61871] Last HTTP packet was sent, terminating the channel 2025-09-23 17:45:21.790 [reactor-http-nio-8] DEBUG reactor.netty.channel.ChannelOperations - [61a722e4-1, L:/192.168.10.122:9000 - R:/192.168.10.122:61871] [HttpServer] Channel inbound receiver cancelled (operation cancelled). 2025-09-23 17:45:21.790 [reactor-http-nio-8] DEBUG o.s.web.server.adapter.HttpWebHandlerAdapter - [61a722e4-7] Completed 200 OK 2025-09-23 17:45:25.605 [reactor-http-nio-1] DEBUG reactor.netty.http.server.HttpServerOperations - [80f8cd8e, L:/192.168.10.122:9000 - R:/192.168.10.122:61872] New http connection, requesting read 2025-09-23 17:45:25.605 [reactor-http-nio-1] DEBUG reactor.netty.transport.TransportConfig - [80f8cd8e, L:/192.168.10.122:9000 - R:/192.168.10.122:61872] 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-23 17:45:25.607 [reactor-http-nio-1] DEBUG reactor.netty.http.server.HttpServerOperations - [80f8cd8e, L:/192.168.10.122:9000 - R:/192.168.10.122:61872] Increasing pending responses, now 1 2025-09-23 17:45:25.607 [reactor-http-nio-1] DEBUG reactor.netty.http.server.HttpServer - [80f8cd8e-1, L:/192.168.10.122:9000 - R:/192.168.10.122:61872] Handler is being applied: org.springframework.http.server.reactive.ReactorHttpHandlerAdapter@44b58719 2025-09-23 17:45:25.607 [reactor-http-nio-1] DEBUG o.s.web.server.adapter.HttpWebHandlerAdapter - [80f8cd8e-8] HTTP POST "/master/shipperPart/listPartsWithStatus?supplierId=3&shipperId=28&spliceDesc=" 2025-09-23 17:45:25.607 [reactor-http-nio-1] DEBUG o.s.w.r.r.m.a.RequestMappingHandlerMapping - [80f8cd8e-8] Mapped to com.hvlink.controller.ShipperPartController#listPartsWithStatus(Integer, Integer, String, String) 2025-09-23 17:45:25.609 [reactor-http-nio-1] DEBUG org.springframework.web.method.HandlerMethod - [80f8cd8e-8] Could not resolve parameter [2] in public com.hvlink.common.Result<java.util.List<com.hvlink.entity.vo.master.PartVO>> com.hvlink.controller.ShipperPartController.listPartsWithStatus(java.lang.Integer,java.lang.Integer,java.lang.String,java.lang.String): 400 BAD_REQUEST "Required String parameter 'partCode' is not present" 2025-09-23 17:45:25.609 [reactor-http-nio-1] DEBUG o.s.w.r.r.m.a.RequestMappingHandlerAdapter - [80f8cd8e-8] Using @ExceptionHandler com.hvlink.exceptions.ExceptionHandle#handleException(Exception) 2025-09-23 17:45:25.611 [reactor-http-nio-1] ERROR com.hvlink.exceptions.ExceptionHandle - ===服务器内部错误== org.springframework.web.server.ServerWebInputException: 400 BAD_REQUEST "Required String parameter 'partCode' 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.channelRead(ByteToMessageDecoder.java:318) 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-23 17:45:25.611 [reactor-http-nio-1] DEBUG o.s.w.r.r.m.annotation.ResponseBodyResultHandler - [80f8cd8e-8] Using 'application/json' given [application/json, text/plain, */*] and supported [application/json, application/*+json, application/x-ndjson, text/event-stream] 2025-09-23 17:45:25.611 [reactor-http-nio-1] DEBUG o.s.w.r.r.m.annotation.ResponseBodyResultHandler - [80f8cd8e-8] 0..1 [com.hvlink.common.Result<?>] 2025-09-23 17:45:25.612 [reactor-http-nio-1] DEBUG o.s.http.codec.json.Jackson2JsonEncoder - [80f8cd8e-8] Encoding [Result(status=500, msg=发现未知问题,请联系管理员!, data=null, timestamp=1758620725611)] 2025-09-23 17:45:25.613 [reactor-http-nio-1] DEBUG reactor.netty.http.server.HttpServerOperations - [80f8cd8e-1, L:/192.168.10.122:9000 - R:/192.168.10.122:61872] Detected non persistent http connection, preparing to close 2025-09-23 17:45:25.613 [reactor-http-nio-1] DEBUG reactor.netty.http.server.HttpServerOperations - [80f8cd8e-1, L:/192.168.10.122:9000 - R:/192.168.10.122:61872] Last HTTP packet was sent, terminating the channel 2025-09-23 17:45:25.613 [reactor-http-nio-1] DEBUG reactor.netty.channel.ChannelOperations - [80f8cd8e-1, L:/192.168.10.122:9000 - R:/192.168.10.122:61872] [HttpServer] Channel inbound receiver cancelled (operation cancelled). 2025-09-23 17:45:25.614 [reactor-http-nio-1] DEBUG o.s.web.server.adapter.HttpWebHandlerAdapter - [80f8cd8e-8] Completed 500 INTERNAL_SERVER_ERROR 我没有这个请求参数,为什么报错 <select id="selectPartsWithBindStatus" resultType="com.hvlink.entity.dto.master.ShipperPartDTO"> SELECT id, part_code, part_desc, supplier_code, assigned FROM ( SELECT p.id, p.part_code, p.part_desc, p.supplier_code, CASE WHEN sp.part_id IS NOT NULL THEN 1 ELSE 0 END AS assigned, ROW_NUMBER() OVER (PARTITION BY p.part_code ORDER BY p.id) AS rn FROM tm_part p LEFT JOIN tm_shipper_part sp ON p.id = sp.part_id AND sp.shipper_id = #{shipperId} WHERE p.supplier_code = ( SELECT supplier_code FROM tm_supplier WHERE id = #{supplierId} ) <if test="searchValue != null and searchValue != ''"> AND ( CONCAT(p.part_code, ' - ', p.part_desc) LIKE '%' + #{spliceDesc} + '%' ) </if> ) t WHERE rn = 1 ORDER BY part_code </select> /** * 查询供应商下的所有零件(包含绑定状态) */ @PostMapping("/listPartsWithStatus") public Result<List<PartVO>> listPartsWithStatus( @RequestParam Integer supplierId, @RequestParam Integer shipperId, @RequestParam String spliceDesc) { try { List<PartVO> parts = shipperPartService.listPartsWithStatus(supplierId, shipperId,spliceDesc); return Result.success(parts); } catch (Exception e) { log.error("查询零件列表失败 supplierId:{}, shipperId:{}", supplierId, shipperId, e); return Result.fail("查询失败"); } }
最新发布
09-24
你提出的问题是: > **“我没有这个请求参数,为什么报错?”** 具体错误信息如下: ``` 400 BAD_REQUEST "Required String parameter 'partCode' is not present" ``` 但你在代码中定义的接口是: ```java @PostMapping("/listPartsWithStatus") public Result<List<PartVO>> listPartsWithStatus( @RequestParam Integer supplierId, @RequestParam Integer shipperId, @RequestParam String spliceDesc) { ... } ``` 而你的 URL 请求是: ``` /master/shipperPart/listPartsWithStatus?supplierId=3&shipperId=28&spliceDesc= ``` --- ### ✅ 问题分析 从日志和代码来看,**关键矛盾点在于:** - 接口要求三个 `@RequestParam` 参数:`supplierId`, `shipperId`, `spliceDesc` - 实际请求确实传了这三个参数(包括空字符串 `spliceDesc=`),所以按理说应该能匹配。 但是错误提示却是: > **"Required String parameter 'partCode' is not present"** 注意:这个参数叫 `partCode`,但在你的方法签名里根本没有 `partCode`! 这说明:**不是当前这个方法抛出的异常,而是 Spring 在尝试绑定参数时,发现有一个 required 的 `partCode` 参数缺失。** --- ## 🔍 根本原因:`spliceDesc` 和 `searchValue` 混淆 + MyBatis XML 使用了未传递的字段 我们来看你的 MyBatis SQL 片段: ```xml <if test="searchValue != null and searchValue != ''"> AND ( CONCAT(p.part_code, ' - ', p.part_desc) LIKE '%' + #{spliceDesc} + '%' ) </if> ``` 这里有两个严重问题: --- ### ❌ 问题 1:条件判断的是 `searchValue`,但用的是 `#{spliceDesc}` - `<if test="searchValue != null and searchValue != ''">` → 判断的是 `searchValue` 字段是否存在。 - 但后面却用了 `#{spliceDesc}` 做模糊查询。 这意味着: - 如果前端没有传 `searchValue`,即使传了 `spliceDesc=""`,这个条件也不会进入。 - 更糟的是,如果某些地方误把 `searchValue` 当成必须参数,就会导致绑定失败! 👉 所以你应该统一命名!要么都用 `searchValue`,要么都用 `spliceDesc`。 --- ### ❌ 问题 2:Spring 正在寻找一个叫 `partCode` 的参数? 虽然你没在 Controller 中写 `partCode`,但有可能以下几种情况之一发生: #### 可能性 A:**有另一个同名或相似路径的 Handler Method 被优先匹配了?** 比如存在另一个方法: ```java @GetMapping("/listPartsWithStatus") public Result<?> someMethod(@RequestParam String partCode) { ... } ``` → 它可能也映射到了 `/listPartsWithStatus`,但由于是 GET 请求,而你是 POST,所以不太像。 #### 可能性 B:**DTO 或实体类中有 `partCode` 字段,并被自动绑定?** 如果你的 `ShipperParam` 或其他全局解析器试图绑定所有请求参数到对象上,而请求中缺少 `partCode`(但又标记为 required),也可能触发此错误。 但从堆栈看,实际出错位置是: ```java at org.springframework.web.reactive.result.method.annotation.RequestParamMethodArgumentResolver.handleMissingValue ``` 说明是一个带 `@RequestParam` 注解的方法参数缺失了。 --- ### ⚡ 最合理的解释(结合日志): 你贴出的 Controller 方法是: ```java @PostMapping("/listPartsWithStatus") public Result<List<PartVO>> listPartsWithStatus( @RequestParam Integer supplierId, @RequestParam Integer shipperId, @RequestParam String spliceDesc) ``` 但是!**`spliceDesc` 是一个可为空的字符串(如 `spliceDesc=`)**,默认情况下 `@RequestParam String xxx` 是 **required=true** 的! 也就是说: ```java @RequestParam String spliceDesc ``` 等价于: ```java @RequestParam(required = true) String spliceDesc ``` 所以当请求中 `spliceDesc=` 空值时,Spring WebFlux 认为它存在,不会报错。✅ 但如果 **压根没传 `spliceDesc` 参数**,就会报错。 但你的错误是关于 `partCode` 的,不是 `spliceDesc`。 --- ## 🧩 关键突破口:日志中的错误明确指出 —— 缺少的是 `partCode` ```log Required String parameter 'partCode' is not present ``` 而在你的 Mapper XML 中,你使用了一个变量叫 `#{spliceDesc}`,但它在运行时需要通过 Java 方法参数传入。 如果你的方法参数名没有正确映射(尤其在非 debug 编译模式下),MyBatis 无法识别 `#{spliceDesc}` 对应哪个 Java 参数,可能导致反射过程中尝试访问不存在的属性,甚至引发参数解析混乱。 但这通常不会直接导致 Spring 报 `partCode` 缺失。 --- ## ✅ 结论与解决方案 ### ✅ 错误根本原因总结: > 尽管你认为自己只调用了 `listPartsWithStatus` 并传了 `supplierId`, `shipperId`, `spliceDesc`,但 Spring 报错说缺少 `partCode`,说明: > > **你的请求实际上触发了一个不同的处理器方法(Handler Method),该方法需要 `partCode` 参数。** > > 很可能是:**前端发错了请求(多了个预期外的参数需求),或者后端存在多个重载接口,路由冲突。** --- ## ✅ 解决方案 ### ✅ 1. 修改 Controller,让 `spliceDesc` 允许为空(即非必填) ```java @PostMapping("/listPartsWithStatus") public Result<List<PartVO>> listPartsWithStatus( @RequestParam Integer supplierId, @RequestParam Integer shipperId, @RequestParam(required = false) String spliceDesc) { // 注意:required = false try { List<PartVO> parts = shipperPartService.listPartsWithStatus(supplierId, shipperId, spliceDesc); return Result.success(parts); } catch (Exception e) { log.error("查询零件列表失败 supplierId:{}, shipperId:{}", supplierId, shipperId, e); return Result.fail("查询失败"); } } ``` 这样即使不传 `spliceDesc` 或传空字符串,也能正常处理。 --- ### ✅ 2. 统一 XML 和 Java 中的参数名称 修改你的 MyBatis SQL: ```xml <select id="selectPartsWithBindStatus" resultType="com.hvlink.entity.dto.master.ShipperPartDTO"> SELECT id, part_code, part_desc, supplier_code, assigned FROM ( SELECT p.id, p.part_code, p.part_desc, p.supplier_code, CASE WHEN sp.part_id IS NOT NULL THEN 1 ELSE 0 END AS assigned, ROW_NUMBER() OVER (PARTITION BY p.part_code ORDER BY p.id) AS rn FROM tm_part p LEFT JOIN tm_shipper_part sp ON p.id = sp.part_id AND sp.shipper_id = #{shipperId} WHERE p.supplier_code = ( SELECT supplier_code FROM tm_supplier WHERE id = #{supplierId} ) <if test="spliceDesc != null and spliceDesc != ''"> AND CONCAT(p.part_code, ' - ', p.part_desc) LIKE '%' + #{spliceDesc} + '%' </if> ) t WHERE rn = 1 ORDER BY part_code </select> ``` ⚠️ 改动点: - `<if test="searchValue != null ...">` → 改为 `spliceDesc` - 条件与参数一致,避免逻辑错乱 --- ### ✅ 3. 检查是否有其他接口监听相同路径但需要 `partCode` 搜索整个项目: ```bash grep -r "/listPartsWithStatus" . ``` 看看是否还有类似: ```java @GetMapping("/master/shipperPart/listPartsWithStatus") public Result<?> xxx(@RequestParam String partCode) { ... } ``` 如果有,删除或修正路径。 --- ### ✅ 4. 启用编译保留参数名(防止 MyBatis 参数绑定失败) 确保 Maven 编译时加上 `-parameters`: ```xml <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <compilerArgs> <arg>-parameters</arg> </compilerArgs> <source>8</source> <target>8</target> </configuration> </plugin> ``` 否则 Java 方法参数名会变成 `arg0`, `arg1`, `arg2`,导致 `#{spliceDesc}` 找不到对应参数。 --- ### ✅ 5. 前端检查请求参数拼接是否正确 确认前端发送的是: ``` POST /master/shipperPart/listPartsWithStatus Body or Query: supplierId=3&shipperId=28&spliceDesc=someText ``` 而不是: ``` GET /master/shipperPart/listPartsWithStatus?partCode=ABC ``` 后者会被另一个 handler 捕获并报错。 --- ## ✅ 补充建议:使用对象接收参数更清晰 创建一个 Param 类: ```java public class PartSearchParam { private Integer supplierId; private Integer shipperId; private String spliceDesc; // getter/setter } ``` Controller 改为: ```java @PostMapping("/listPartsWithStatus") public Result<List<PartVO>> listPartsWithStatus(@RequestBody PartSearchParam param) { try { List<PartVO> parts = shipperPartService.listPartsWithStatus(param.getSupplierId(), param.getShipperId(), param.getSpliceDesc()); return Result.success(parts); } catch (Exception e) { log.error("查询零件列表失败", e); return Result.fail("查询失败"); } } ``` 然后前端以 JSON 提交: ```json { "supplierId": 3, "shipperId": 28, "spliceDesc": "engine" } ``` ✔️ 更安全、更清晰、不易因参数顺序出错。 --- ## ✅ 总结 | 问题 | 原因 | 解决方案 | |------|------|-----------| | 报错 `partCode` 不存在 | 存在另一个需要 `partCode` 的接口被匹配 | 检查所有 `/listPartsWithStatus` 映射 | | `spliceDesc` 不生效 | XML 中判断 `searchValue`,但引用 `spliceDesc` | 统一变量名 | | 参数绑定失败 | 编译未保留参数名 | 添加 `-parameters` 编译选项 | | 空字符串报错 | `@RequestParam String` 默认 required=true | 加 `required = false` | --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值