将另一个对象传递给当前的休息服务不会引发异常

Posted

技术标签:

【中文标题】将另一个对象传递给当前的休息服务不会引发异常【英文标题】:passing another object into current rest service does not throw an exception 【发布时间】:2019-12-06 00:45:25 【问题描述】:

这是与其他服务兼容的休息请求:


  "fromDate": 1562773101000,
  "toDate": 1563118701000,
  "turnOverType": 4,
  "fromAmount": 1,
  "toAmount": 10000000,
  "voucherDescription": null,
  "articleDescription": null,
  "referenceNumbers": [],
  "offset": 3,
  "pageSize": 20,
  "iban": "BLAHBLAHBLAHBLAH"

这是与请求不匹配的对应模型:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "TransferRequestInquiryFilter")
public class TransferRequestInquiryFilter implements Serializable 
    @XmlElement(name = "sourceIbans")
    private List<String> sourceIbans;
    @XmlElement(name = "transferType")
    private TransferType transferType;
    @XmlElement(name = "fromTransferDate")
    private Timestamp fromTransferDate;
    @XmlElement(name = "toTransferDate")
    private Timestamp toTransferDate;
    @XmlElement(name = "fromRegistrationDate")
    private Timestamp fromRegistrationDate;
    @XmlElement(name = "toRegistrationDate")
    private Timestamp toRegistrationDate;
    @XmlElement(name = "trackingNumbers")
    private List<String> trackingNumbers;
    @XmlElement(name = "referenceNumbers")
    private List<String> referenceNumbers;
    @XmlElement(name = "transactionIds")
    private List<String> transactionIds;
    @XmlElement(name = "status")
    private TransactionStatus status;
    @XmlElement(name = "fromAmount")
    private Long fromAmount;
    @XmlElement(name = "toAmount")
    private Long toAmount;
    @XmlElement(name = "destinationIbans")
    private List<String> destinationIbans;

这是我的控制器..

@RequestMapping(value = "/inquiry", method = RequestMethod.POST)
public @ResponseBody
ResponseEntity<List<ExtendedTransferRequest>> transferInquiry(@RequestBody @Valid TransferRequestInquiryFilter transferRequestInquiryFilter
        , BindingResult bindingResult) 

    // when validation not works return bad request
    List<ErrorObject> errorObjects = requestInquiryValidator.validate(transferRequestInquiryFilter);
    if (errorObjects.size() > 0) 
        // just throw bad request and not detail of them
        return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
    

    List<ExtendedTransferRequest> extendedTransferRequestList = new ArrayList<>();
    ExtendedTransferRequest extendedTransferRequest = new ExtendedTransferRequest();
    List<SettlementTransaction> settlementTransactionList = settlementSearch.findSettlement(transferRequestInquiryFilter);
    extendedTransferRequestList = TransferInquiryResponseMapper.INSTANCE.SettlementTransactionInquiryResponse(setlementTransactionList);
    return new ResponseEntity<>(extendedTransferRequestList, HttpStatus.OK);


只是 fromAmount 和 toAmount 填充。但我想在这种情况下得到一个例外,并向客户抛出一个错误的请求。我怎样才能做到这一点?如果我在 rest request 和 model 之间出现名称冲突或类型冲突,我需要处理它并向客户提出错误的请求。我正在使用 spring mvc 5 和 jackson-core 和 jackson-databind 2.9.4

【问题讨论】:

完全不清楚你的问题是什么。 服务参数与 rest request 不同,在这种情况下会出现 HttpMessageNotReadableException。但没有异常发生。 【参考方案1】:

使用validation-api,在控制器方法之前注释字段和@validated的正确验证,在RequestBody对象之前使用@valid会抛出正确的验证异常。

【讨论】:

以上是关于将另一个对象传递给当前的休息服务不会引发异常的主要内容,如果未能解决你的问题,请参考以下文章

将过程参数传递给 SELECT INTO where 子句不起作用

角度 2 - 在 div 单击时,将对象传递给另一个组件,另一个组件使用该对象调用休息服务

休息服务抛出异常:最好的处理方式

Pyspark 将函数作为参数传递给 UDF

如何将另一整列作为参数传递给 pandas fillna()

Javascript ajax 将动态创建的 json 对象传递给 Web 服务