Wrong invalidValue using Hibernate ScriptAssert
I created a Spring Boot, DATA Rest, Hibernate application.
I added to my bean a @ScriptAssert
and it works fine but unfortunately differently from other validators it return an object as invalid value.
This is my bean:
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;
and this is 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;
This is the @ScriptAssert
:
@ScriptAssert(lang = "javascript", script = "_.note==false?_.taxRate!=null:true", alias = "_", reportOn = "taxRate", message = "{documentrow.taxrate.mandatory}")
and this is the response I got from my rest controller:
{
"errors" : [ {
"entity" : "test.server.model.accounting.documents.DocumentRow",
"property" : "taxRate",
"invalidValue" : "test.server.model.accounting.documents.DocumentRow@95104f01",
"message" : "{documentrow.taxrate.mandatory}"
} ]
}
How you can see the invalidValue is DocumentRow
itself, instead it should be TaxRate
.
How can I customize the invalidValue returned from ScriptAssert?
java spring hibernate hibernate-validator
add a comment |
I created a Spring Boot, DATA Rest, Hibernate application.
I added to my bean a @ScriptAssert
and it works fine but unfortunately differently from other validators it return an object as invalid value.
This is my bean:
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;
and this is 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;
This is the @ScriptAssert
:
@ScriptAssert(lang = "javascript", script = "_.note==false?_.taxRate!=null:true", alias = "_", reportOn = "taxRate", message = "{documentrow.taxrate.mandatory}")
and this is the response I got from my rest controller:
{
"errors" : [ {
"entity" : "test.server.model.accounting.documents.DocumentRow",
"property" : "taxRate",
"invalidValue" : "test.server.model.accounting.documents.DocumentRow@95104f01",
"message" : "{documentrow.taxrate.mandatory}"
} ]
}
How you can see the invalidValue is DocumentRow
itself, instead it should be TaxRate
.
How can I customize the invalidValue returned from ScriptAssert?
java spring hibernate hibernate-validator
Maybe you should include in your code where you put the constraint. Because otherwise it's hard to say what is the context of the constraint.
– Guillaume Smet
Nov 23 '18 at 12:27
add a comment |
I created a Spring Boot, DATA Rest, Hibernate application.
I added to my bean a @ScriptAssert
and it works fine but unfortunately differently from other validators it return an object as invalid value.
This is my bean:
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;
and this is 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;
This is the @ScriptAssert
:
@ScriptAssert(lang = "javascript", script = "_.note==false?_.taxRate!=null:true", alias = "_", reportOn = "taxRate", message = "{documentrow.taxrate.mandatory}")
and this is the response I got from my rest controller:
{
"errors" : [ {
"entity" : "test.server.model.accounting.documents.DocumentRow",
"property" : "taxRate",
"invalidValue" : "test.server.model.accounting.documents.DocumentRow@95104f01",
"message" : "{documentrow.taxrate.mandatory}"
} ]
}
How you can see the invalidValue is DocumentRow
itself, instead it should be TaxRate
.
How can I customize the invalidValue returned from ScriptAssert?
java spring hibernate hibernate-validator
I created a Spring Boot, DATA Rest, Hibernate application.
I added to my bean a @ScriptAssert
and it works fine but unfortunately differently from other validators it return an object as invalid value.
This is my bean:
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;
and this is 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;
This is the @ScriptAssert
:
@ScriptAssert(lang = "javascript", script = "_.note==false?_.taxRate!=null:true", alias = "_", reportOn = "taxRate", message = "{documentrow.taxrate.mandatory}")
and this is the response I got from my rest controller:
{
"errors" : [ {
"entity" : "test.server.model.accounting.documents.DocumentRow",
"property" : "taxRate",
"invalidValue" : "test.server.model.accounting.documents.DocumentRow@95104f01",
"message" : "{documentrow.taxrate.mandatory}"
} ]
}
How you can see the invalidValue is DocumentRow
itself, instead it should be TaxRate
.
How can I customize the invalidValue returned from ScriptAssert?
java spring hibernate hibernate-validator
java spring hibernate hibernate-validator
asked Nov 23 '18 at 11:53
drendadrenda
1,53222455
1,53222455
Maybe you should include in your code where you put the constraint. Because otherwise it's hard to say what is the context of the constraint.
– Guillaume Smet
Nov 23 '18 at 12:27
add a comment |
Maybe you should include in your code where you put the constraint. Because otherwise it's hard to say what is the context of the constraint.
– Guillaume Smet
Nov 23 '18 at 12:27
Maybe you should include in your code where you put the constraint. Because otherwise it's hard to say what is the context of the constraint.
– Guillaume Smet
Nov 23 '18 at 12:27
Maybe you should include in your code where you put the constraint. Because otherwise it's hard to say what is the context of the constraint.
– Guillaume Smet
Nov 23 '18 at 12:27
add a comment |
0
active
oldest
votes
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53446233%2fwrong-invalidvalue-using-hibernate-scriptassert%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53446233%2fwrong-invalidvalue-using-hibernate-scriptassert%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Maybe you should include in your code where you put the constraint. Because otherwise it's hard to say what is the context of the constraint.
– Guillaume Smet
Nov 23 '18 at 12:27