Grails: java.lang.IllegalArgumentException: нет enum const - PullRequest
1 голос
/ 02 апреля 2012

Я пытаюсь работать с приложением, созданным в Grails, но получаю ошибку, которую не понимаю.По сути, у меня есть перечисление:

package com.wbr.manning.common
public enum ChapterType {
  CHAPTER("chapter"), PREFACE("preface"), APPENDIX("appendix"), PART("part")
  ChapterType(String value) { this.value = value }
  String value
  String getKey() { name() }
  String toString() { value }
}

Но когда я пытаюсь перечислить объекты главы, я получаю:

java.lang.IllegalArgumentException: No enum const class com.wbr.manning.common.ChapterType.part
    at java.lang.Enum.valueOf(Enum.java:196)
    at grails.orm.HibernateCriteriaBuilder.invokeMethod(HibernateCriteriaBuilder.java:1163)
    at com.wbr.manning.agileAuthor.AAChapterController$_closure3.doCall(AAChapterController.groovy:39)
    at com.wbr.manning.agileAuthor.AAChapterController$_closure3.doCall(AAChapterController.groovy)
    at java.lang.Thread.run(Thread.java:662)
2012-04-02 09:55:23,401 [http-8080-1] ERROR common.ErrorsController  - org.codehaus.groovy.grails.web.errors.GrailsWrappedRuntimeException: No enum const class com.wbr.manning.common.ChapterType.part

Любые идеи о том, что я делаю здесь неправильно?У меня правильное перечисление или мне нужно посмотреть на вызывающий код?

Спасибо!

Ответы [ 3 ]

3 голосов
/ 02 апреля 2012

No enum const class com.wbr.manning.common.ChapterType.part

Должно быть ChapterType.PART. Вы должны уважать чувствительность к регистру.

2 голосов
/ 02 апреля 2012

Если вы хотите искать Enum на основе его значения, вам нужно добавить статический метод к вашему enum следующим образом:

static ChapterType fromString( type ) {
  ChapterType.values().find { it.value == type }
}

Затем вы можете сделать:

ChapterType c = ChapterType.fromString( 'part' )
1 голос
/ 02 апреля 2012

Проблема в вашем телефонном коде. В строке 39 из AAChapterController.groovy создается критерий запроса, который вызывает

ChapterType.valueOf("part")

Но стоит позвонить

ChapterType.valueOf("PART")

Если вы не видите здесь буквальную строку "part", найдите переменную String и вызовите .toUpperCase() для нее

...