Я создал приложение Spring Boot, DATA Rest, Hibernate.
Я добавил к своему компоненту @ScriptAssert
, и он работает нормально, но, к сожалению, в отличие от других валидаторов, он возвращает объект как недопустимое значение.
Это мой бин:
public class DocumentRow extends AbstractEntity {
@ManyToOne(fetch = FetchType.LAZY, optional = false)
private Document document;
@JsonDeserialize(using = ProductUriDeserializer.class)
@Any(fetch = FetchType.EAGER, metaDef = "ProductDocumentRowDef", metaColumn = @Column(name = "productGroup"), optional = true)
@AnyMetaDef(name = "ProductDocumentRowDef", metaType = "string", idType = "long", metaValues = {@MetaValue(value = "OL", targetEntity = OphthalmicLens.class),
@MetaValue(value = "F", targetEntity = Frame.class), @MetaValue(value = "CL", targetEntity = ContactLens.class)})
@JoinColumn(name = "product_id")
private Product product;
// The description of the product/note
@Size(max = 255)
@NotBlank
@Column(nullable = false)
private String description;
// Reference to another document row (order/ddt/)
@NotNull
@Min(1)
@Column(nullable = false)
private int qty = 1;
// taxable amount (without taxes)
@NotNull // @Min(value = 0)
@Column(nullable = false, scale = 2)
private BigDecimal unitPrice = BigDecimal.ZERO;
// discount on taxable amount
@NotNull
@Min(value = 0)
@Max(value = 99)
@Column(nullable = false, scale = 2)
private BigDecimal percentageDiscount = BigDecimal.ZERO;
// (unit price * qty) - percentageDiscount% on that amount
@NotNull
@Min(value = 0)
@Column(nullable = false, scale = 2)
private BigDecimal amount = BigDecimal.ZERO;
@JsonDeserialize(using = TaxRateUriDeserializer.class)
@ManyToOne(fetch = FetchType.EAGER, optional = true)
private TaxRate taxRate;
// The total amount of taxes on taxable amount (unit price - percentageDiscount%) * qty)
@NotNull
@Min(value = 0)
@Column(nullable = false, scale = 2)
private BigDecimal taxAmount = BigDecimal.ZERO;
// Total amount (amount+taxAmount)
@Formula(value = "amount+taxAmount")
private BigDecimal totalAmount;
//says if the row is a note
@NotNull
@Column(nullable = false, columnDefinition = "BIT DEFAULT 0")
private boolean note = false;
, а это TaxRate:
public class TaxRate extends AbstractEntity {
@NotBlank
@Column(nullable = false)
private String name;
@NotBlank
@Column(nullable = false, unique = true)
private String code;
@NotNull
@Min(value = 0)
@Max(value = 99)
@Column(nullable = false, scale = 2)
private BigDecimal rate;
@Enumerated(EnumType.STRING)
private TaxType type;
@NotNull
@Column(nullable = false, columnDefinition = "BIT DEFAULT 0")
private boolean preset = false;
Это @ScriptAssert
:
@ScriptAssert(lang = "javascript", script = "_.note==false?_.taxRate!=null:true", alias = "_", reportOn = "taxRate", message = "{documentrow.taxrate.mandatory}")
и этоэто ответ, который я получил от моего контроллера покоя:
{
"errors" : [ {
"entity" : "test.server.model.accounting.documents.DocumentRow",
"property" : "taxRate",
"invalidValue" : "test.server.model.accounting.documents.DocumentRow@95104f01",
"message" : "{documentrow.taxrate.mandatory}"
} ]
}
Как вы можете видеть, invalidValue само по себе DocumentRow
, вместо этого оно должно быть TaxRate
.Как я могу настроить invalidValue, возвращаемое из ScriptAssert?