Grails3: возвращаемый тип java.lang.Логическое значение hasErrors() в AuthRoleController несовместимо с логическим значением в grails.артефакт.Контроллером

#java #grails #upgrade

#java #граали #Обновление #grails

Вопрос:

Я обновил свое приложение с grails 2.5 до grails 3.3.11. Я выполнил все шаги, и, кажется, все в порядке, но когда я запускаю приложение. У меня возникла эта ошибка :

сбой при запуске: /home/server-dev/Documents/dev_repo/tms/grails-app/controllers/org/niport/auth/AuthRoleController.groovy : -1: возвращаемый тип java.lang.Логическое значение hasErrors() в org.niport.auth.AuthRoleController несовместим с boolean в grails.артефакт.Контроллер . В [-1:-1] @ строка -1, столбец -1. ошибка 1

СБОЙ: сбой сборки с исключением.

  • Что пошло не так: не удалось выполнить задачу ‘:compileGroovy’.

Сбой компиляции; подробности см. В выводе ошибки компилятора.

Любая идея или помощь будут полезны, большое спасибо

————————AuthUserController.заводной ———————

      import grails.plugin.springsecurity.SpringSecurityService
        import grails.transaction.Transactional
        import org.niport.com.ComTrainingCenter
        import org.niport.com.ComTrainingCenterService
        import org.niport.com.FileService
        import org.niport.com.TrackerService
        import org.springframework.security.core.context.SecurityContextHolder
        
        import javax.imageio.ImageIO
        import java.awt.image.BufferedImage
        
        import static org.springframework.http.HttpStatus.CREATED
        import static org.springframework.http.HttpStatus.OK
        
        @Transactional(readOnly = true)
        class AuthUserController {
            private static final allowedImageType = ['image/png', 'image/jpeg']
        
            SpringSecurityService springSecurityService
            AuthUserService       authUserService
            TrackerService        trackerService
            FileService           fileService
            def                   dateParseFormat,
                                  currentDate
            AuthUser currentUser
        @Transactional
        save(AuthUser userInstance) {
            if (userInstance == null) {
                flash.error = message(code: "default.message.noRecordFound.label", default: "Error-Save-AuthUser-L21 : Record not found...!")
                redirect(action: "create")
                return
            }
            
    
            userInstance.avatarType = params.attachment ? fileService.uploadFile("auth", "auth_user", userInstance?.username, "any", 1, 5000000, params.attachment) : null
            userInstance.createdBy = currentUser?.id
            userInstance.properties["hdCode"] = trackerService.getHdCode(params.password)
    
            userInstance.validate()
            if (userInstance.hasErrors()) {
                flash.error = "Error-Save-AuthUser-L27 : "   userInstance.errors
                redirect(action: "create", userInstance: userInstance)
                return
            }
    
            try {
                userInstance.save(failOnError: true)
            }
            catch (Exception e) {
                println "ex-user-sa-L112 : "   e
                flash.error = "Error-Save-AuthUser-L113 : "   e
                redirect(action: "create", userInstance: userInstance)
                return
            }
    
            request.withFormat {
                form multipartForm {
                    flash.success = message(code: "default.message.created", args: [message(code: "user.pageTitle.label", default: "AuthUser"), userInstance.id])
                    redirect userInstance
                }
                '*' { respond userInstance, [status: CREATED] }
            }
        }}

--------------------------AuthRoleController.groovy ----------------------
mport grails.transaction.Transactional
import grails.validation.Validateable
//import grails.artefact.Controller 
//import java.lang.*

import static org.springframework.http.HttpStatus.CREATED
import static org.springframework.http.HttpStatus.OK
class AuthRoleController implements Validateable {

    static allowedMethods = [save: "POST", update: "PUT"]

    def springSecurityService, dateFormat, currentDate, currentUser

    def beforeInterceptor = {
        currentDate = new Date()
        currentUser = springSecurityService.getCurrentUser()
        dateFormat  = grailsApplication.config.format.dtp.date
    }
 @Transactional
    def save(AuthRole roleInstance) {
        roleInstance.createdBy=(AuthUser)currentUser
        roleInstance.validate()
        if (roleInstance == null) {
            flash.error = message(code: "default.message.noRecordFound.label", default: "Error-Save-AuthRole-L21 : Record not found...!")
            redirect(action: "create")
            return
        }
        log.info "${roleInstance}";
        if (roleInstance.hasErrors()) {
            flash.error = "Error-Save-AuthRole-L27 : "   roleInstance.errors
            redirect(action: "create", roleInstance: roleInstance)
            return
        }

        try {
            roleInstance.save failOnError: true
        }
        catch (Exception e) {
            flash.error = "Error-Save-AuthRole-L36 : "   e
            redirect(action: "create", roleInstance: roleInstance)
            return
        }

        request.withFormat {
            form multipartForm {
                flash.success = message(code: "default.message.created", args: [message(code: "role.pageTitle.label", default: "AuthRole"), roleInstance.id])
                redirect roleInstance
            }
            '*' { respond roleInstance, [status: CREATED] }
        }
    }

}

}
  

Комментарии:

1. Есть ли org.niport.auth.AuthRoleController в нем метод с именем hasErrors ? Если нет, то расширяет ли контроллер явно какой-либо класс или реализует какие-либо черты?

2. Привет @JeffScottBrown это всего лишь экземпляр взаимодействия с ошибкой Spring, связанного с контроллером. Но я могу поделиться кодом связанных элементов управления в качестве ответов

3. Это не связано с вашим вопросом, но добавленный вами код указывает на другую проблему, и это ваш контроллер не будет совместим с параллельными запросами из-за способа, которым вы передаете currentUser AuthRoleController . Это будет нарушено, если вы не настроите свои контроллеры на область запроса, что является плохой идеей.

Ответ №1:

класс AuthRoleController реализует Проверяемый

Нет веских причин для того, чтобы контроллер реализовывал эту Validateable черту, и это вызовет проблемы.

Проблема в том, что вы собираетесь получить 2 названных метода hasErrors , один из https://github.com/grails/grails-core/blob/1979b62d0ef9ebbaa547c8744263376557a10459/grails-plugin-validation/src/main/groovy/grails/validation/Validateable.groovy#L58 и один из https://github.com/grails/grails-core/blob/1979b62d0ef9ebbaa547c8744263376557a10459/grails-plugin-controllers/src/main/groovy/grails/artefact/Controller.groovy#L123 , и они имеют разные типы возвращаемых данных.

Комментарии:

1. Удаление Validateable из контроллера не будет стоить вам никаких возможностей. Его присутствие не приносит ничего полезного.

2. Спасибо, Джефф, я удалю Проверяемый интерфейс и сообщу вам сейчас, если он сработает