47 Star 317 Fork 84

yl-yue / yue-library

 / 详情

spring mvc默认的请求拦截器及响应处理不能正常使用

Done
Opened this issue  
2020-12-23 18:28

该问题是怎么引起的?

@RequestMapping中指定produces为xml类型,不能正确返回xml
controller方法入参添加注解@Valid会导致无法映射请求

重现步骤

报错信息

Comments (9)

weasel created任务
weasel set related repository to yl-yue/yue-library
Expand operation logs

你好,能提供更详细的说明么。

  1. @RequestMapping中指定produces为xml类型,不能正确返回xml
    A:这个应该属于SpringBoot自身特性,这边并未修改过或处理,也许有响应破坏行为,我这边确认下

  2. controller方法入参添加注解@Valid会导致无法映射请求
    A:这个情况我这边无法复现,是否有添加 @ApiVersion 注解,或者接口路径定义冲突,有错误信息么

yl-yue changed issue state from 待办的 to 进行中
yl-yue set assignee to yl-yue
yl-yue added
 
question
label

你好,能提供更详细的说明么。

  1. @RequestMapping中指定produces为xml类型,不能正确返回xml
    A:这个应该属于SpringBoot自身特性,这边并未修改过或处理,也许有响应破坏行为,我这边确认下
  2. controller方法入参添加注解@Valid会导致无法映射请求
    A:这个情况我这边无法复现,是否有添加 @ApiVersion 注解,或者接口路径定义冲突,有错误信息么

@yl-yue 你好,
-第一个问题我已查明原因,我使用的是如下配置:
···
yue:
web:
http-message-converter:
fastjson:
enabled: true
serializer-features:
- BrowserCompatible
- WriteNullListAsEmpty
- WriteMapNullValue
- PrettyFormat
- WriteDateUseDateFormat
- DisableCircularReferenceDetect
enabled-repeatedly-read-servlet-request: true
···

ai.yue.library.web.config.WebMvcConfig定义的fastJsonHttpMessageConverterConfig破坏了spring mvc的默认HttpMessageConverter,原因是FastJsonHttpMessageConverter supportedMediaTypes属性范围过大,将其限制为json类型即可;

-第二个问题我并未添加@ApiVersion,报文为:
GET http://localhost:8080/app/9/notToken?method=ds&format=xml&app_key=wms&v=1.0&sign=sffs&sign_method=md5&customerId=wms&timestamp=fds
Accept: /
Cache-Control: no-cache
Content-Type: application/xml

12d

输入图片说明
输入图片说明

yl-yue added
 
bug
label
yl-yue removed
 
question
label

感谢你提供的详细错误信息与解决方案,方便的话欢迎你的PR!

A2:QimenApiRequest是一个实体类么,你的请求参数是否类似于这样:
请求参数说明

感谢你提供的详细错误信息与解决方案,方便的话欢迎你的PR!
A2:QimenApiRequest是一个实体类么,你的请求参数是否类似于这样:
请求参数说明

@yl-yue QimenApiRequest是一个实体类,实体属性在url中拼接,method=ds&format=xml&app_key=wms&v=1.0&sign=sffs&sign_method=md5&customerId=wms&timestamp=fd,
这些参数就是QimenApiRequest的属性;模拟的body格式正确

weasel throughyl-yue/yue-library Pull Request !9 changed issue state from 进行中 to 已完成
yl-yue changed issue state from 已完成 to 进行中
yl-yue throughyl-yue/yue-library Pull Request !10 changed issue state from 进行中 to 已完成

第二个bug解决了么,如何解决的

第二个问题基于现在收到的信息,暂未能复现校验不生效的场景。我这边对校验方式做了个增强,支持将@Valid注解添加到POJO类上

输入图片说明

校验框架更多文档说明:https://ylyue.cn/#/base/校验

本周会发布新版本

https://gitee.com/yl-yue/yue-library/releases/j11.2.3.0

https://ylyue.cn/#/changelog

2.3.0版本已发布,可以尝试使用2.3.0版本来解决你现在所遇到的问题,或者提供更详细的测试用例,以供定位复现BUG,如提供:controller层所用到的相关方法与实体类,并建议你做敏感加密处理

https://gitee.com/yl-yue/yue-library/releases/j11.2.3.0
https://ylyue.cn/#/changelog
2.3.0版本已发布,可以尝试使用2.3.0版本来解决你现在所遇到的问题,或者提供更详细的测试用例,以供定位复现BUG,如提供:controller层所用到的相关方法与实体类,并建议你做敏感加密处理

@yl-yue 具体代码如下

@Data
public class QimenApiRequest {
    @NotBlank
    private String method;
    @NotBlank
    private String format = "xml";
    @NotBlank
    private String app_key = "wms";
    @NotBlank
    private String v = "1.0";
    @NotBlank
    private String sign;
    @NotBlank
    private String sign_method = "md5";
    @NotBlank
    private String customerId = "wms";
    @NotBlank
    private String timestamp = DateUtil.now();
}
@Data
@XmlRootElement(name = "response")
@XmlAccessorType(XmlAccessType.FIELD)
public class QimenApiResponse {
    @XmlElement
    private String flag = "failure";
    @XmlElement
    private String code;
    @XmlElement
    private String message;
}
@RestController
@RequestMapping("/wms/api/qimen")
@Slf4j
public class ReturnReceiptController {

    /**
     * 入库回调确认
     *
     * @param xml
     * @return
     */
    @ResponseBody
    @PostMapping(params = "method=entryorder.confirm",produces = MediaType.APPLICATION_XML_VALUE, consumes = MediaType.APPLICATION_XML_VALUE)
    public QimenApiResponse entryOrderConfirm(@Valid QimenApiRequest request, @RequestBody String xml) {
        log.info("入库单回调参数:" + xml);
        Map<String, Object> params = XmlUtil.xmlToMap(xml);
        // 这里返回xml
        // QimenApiResponse response = xxxService.doSth(params);
        QimenApiResponse response = ...;
        return response;
    }
}
yl-yue changed issue state from 已完成 to 进行中

此BUG已在 6d7075提交 中彻底解决,并提交了相关测试用例

稳定版将计划在7个工作日内发布

yl-yue changed issue state from 进行中 to 已完成

Sign in to comment

Status
Assignees
Milestones
Pull Requests
Successfully merging a pull request will close this issue.
Branches
Planed to start   -   Planed to end
-
Top level
Priority
参与者(2)
1297803 yl yue 1613569574
Java
1
https://gitee.com/yl-yue/yue-library.git
git@gitee.com:yl-yue/yue-library.git
yl-yue
yue-library
yue-library

Search

182229 41614e54 1850385 182230 7885ed45 1850385