gpt4 book ai didi

exception - 无法序列化流程执行

转载 作者:行者123 更新时间:2023-12-02 14:09:07 25 4
gpt4 key购买 nike

异常(exception):

Error 500: Could not serialize flow execution; make sure all objects stored in 
flow or flash scope are serializable
Servlet: grails
URI: /payment.com/grails/payment/makePayment.dispatch
Exception Message: payment.com.ValidationService$$EnhancerByCGLIB$$d0f2434f
Caused by: Could not serialize flow execution; make sure all objects stored in
flow or flash scope are serializable
Class: Unknown
At Line: [-1]
Code Snippet:

讨论:
payment.com: project name         
payment: is the name of (domain, view, controller)
makePayment: is a webflow to make payment
ValidationService: is a service to test if credit card is valid or not

问题:
我在grails项目中遇到了这个错误
i have a grails webflow that makes a payment, in this webflow i use grails 
command object to validate input values.
when i call the method isValid from Validation service i got this error

注意:
i try to serialize domain class, controller, service, & command object class, 
but i couldn't solve this issue.

任何帮助,谢谢

编辑:

验证服务
 package payment.com

import java.io.Serializable;

class ValidationService implements Serializable{

// Filter out non-digit characters
def getDigitsOnly (String s) {
StringBuffer digitsOnly = new StringBuffer ();
char c;
for (int i = 0; i < s.length (); i++) {
c = s.charAt (i);
if (Character.isDigit (c)) digitsOnly.append (c);
}
return digitsOnly.toString ();
}

// Perform Luhn check
def isValid (String cardNumber) {
String digitsOnly = getDigitsOnly (cardNumber);
int sum = 0;
int digit = 0;
int addend = 0;
boolean timesTwo = false;

for (int i = digitsOnly.length () - 1; i >= 0; i--) {
digit = Integer.parseInt (digitsOnly.substring (i, i + 1));
if (timesTwo){
addend = digit * 2;
if (addend > 9) addend -= 9;
}else{
addend = digit;
}
sum += addend;
timesTwo = !timesTwo;
}
int modulus = sum % 10;

if (modulus == 0){
return true
}else{
return false
}
}
}

MakePaymentStep1Command
package payment.com

import org.codehaus.groovy.grails.validation.Validateable;
import java.io.Serializable;
import payment.com.ValidationService;

@Validateable
class MakePaymentStep1Command implements Serializable{
ValidationService ValidationService
String cardNumber

static constraints ={
cardNumber(blank:false, size:11..16, validator:{ val, obj->
if (!obj.ValidationService.isValid(val)){
return ['payment.cardNumber.invalid']
}
return true;
})
}
}

付款 Controller
class PaymentController{
....
....
def MakePaymentFlow = {
....
Step1{
on('submit').to('Step1Submit')
}
Step1Submit{
action {MakePaymentStep1Command cmd ->
flow.step1Bean = cmd
if (!flow.step1Bean.validate()){
error()
}
}
on('error').to('Step1')
on('success'){
flow.message = null
}.to('Step2')
}


....
}


}

错误发生在这里:
 if (!flow.step1Bean.validate()){
error()
}

最佳答案

您在(src/groovy)中有一个grails project目录。将您的validation Service class放在此目录下,您的makepaymentStepCommand将为:
MakePaymentStep1Command

package payment.com

import java.io.Serializable;
import payment.com.Validation;

class MakePaymentStep1Command implements Serializable{
Validation validation
String cardNumber

static constraints ={
cardNumber(blank:false, size:11..16, validator:{ val, obj->
if (!obj.validation.isValid(val)){
return ['payment.cardNumber.invalid']
}
return true;
})
}
}
I am not sure if this works, but try it.

关于exception - 无法序列化流程执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8893340/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com