|
|
|
spring 3 controller: не может принять объект в качестве параметра
|
|||
|---|---|---|---|
|
#18+
привет, я новичек в спринге (как всегда) я делаю форму для поиска (на extjs - непринципиально), чтобы искало по всем полям таблицы, с диапазонами и т.п. диапазоны передаются массивами, другие поля - просто текстом, который я потом разобью на куски поискового запроса, ну это потом. я решил сделать объект, в который будет собираться сабмит формы, и потом из этого объекта сделать критерии или нативный sql запрос. контроллер такой: Код: java 1. 2. 3. 4. 5. 6. 7. DocumentFindCriteria - это просто pojo, типа такого: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. плюс геттеры и сеттеры запрос POST приходит такой, title:авпр варап fullTitle:рап орпа comment: па ропа орпар опаро апр о year:1900 year:1902 number: archiveNumber: originationDate:04/09/2012 originationDate:04/19/2012 approvalDate:04/15/2012 approvalDate: registrationDate:04/24/2012 registrationDate: placementDate: placementDate: domain:{"fullName":"New","id":"4","level":"1","name":"New"} stage:[object Object] stage:[object Object] site:[{"id":"107","name":"вавап"}] classification:[] limitationDetails: author:[тратата] superType:[{"id":"15","name":"Archives"},{"id":"17","name":"Video"}] type:[{"id":57,"name":"Arj Archive","isMultiFile":"false","superType":{"id":"15","name":"Archives"},"typeExt":[{"ext":{"ext":"arj"},"id":"162","isMain":"false","maxCount":"0","minCount":"0"}]},{"id":58,"name":"AVI Video","isMultiFile":"false","superType":{"id":"17","name":"Video"},"typeExt":[{"ext":{"ext":"avi"},"id":"163","isMain":"false","maxCount":"0","minCount":"0"}]}] originationDetails:апр апр апр periodicity:[{"descr":"Daily Update","id":"2","name":"Once A Day"},{"descr":"Monthly Update","id":"4","name":"Once A Month"}] и т.д. видно, что спринг пытается это дело засунуть в объект, но у него происходят ошибки типа таких: Field error in object 'documentFindCriteria' on field 'approvalDate': rejected value [04/15/2012,]; codes [typeMismatch.documentFindCriteria.approvalDate,typeMismatch.approvalDate,typeMismatch.[Ljava.util.Date;,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [documentFindCriteria.approvalDate,approvalDate]; arguments []; default message [approvalDate]]; default message [Failed to convert property value of type 'java.lang.String[]' to required type 'java.util.Date[]' for property 'approvalDate'; nested exception is org.springframework.core.convert.ConversionFailedException: Unable to convert value "" from type 'java.lang.String' to type 'java.util.Date'; nested exception is java.lang.IllegalArgumentException] Field error in object 'documentFindCriteria' on field 'classification': rejected value [[]]; codes [typeMismatch.documentFindCriteria.classification,typeMismatch.classification,typeMismatch.[Lru.doc.entities.Classification;,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [documentFindCriteria.classification,classification]; arguments []; default message [classification]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'ru.doc.entities.Classification[]' for property 'classification'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [ru.doc.entities.Classification] for property 'classification[0]': no matching editors or conversion strategy found] этот объект не персистится (не лежит в базе) - из него я буду делать критерии для поиска по базе. возможно, я вообще все неправильно делаю для реализации формы поиска, но решил попробовать так может, мне какие-то волшебные аннотации поставить? в системе есть Jersey, им я буду парсить jsonы. (и еще ExlipceLink) тут могло быть что угодно! а есть - это. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2012, 15:35:17 |
|
||
|
spring 3 controller: не может принять объект в качестве параметра
|
|||
|---|---|---|---|
|
#18+
аувв, что тут непонятно? автор[Failed to convert property value of type 'java.lang.String[]' to required type 'java.util.Date[]' for property 'approvalDate'; nested exception is org.springframework.core.convert.ConversionFailedException: Unable to convert value "" from type 'java.lang.String' to type 'java.util.Date'; nested exception is java.lang.IllegalArgumentException] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2012, 15:52:36 |
|
||
|
spring 3 controller: не может принять объект в качестве параметра
|
|||
|---|---|---|---|
|
#18+
drsmаувв, что тут непонятно? автор[Failed to convert property value of type 'java.lang.String[]' to required type 'java.util.Date[]' for property 'approvalDate'; nested exception is org.springframework.core.convert.ConversionFailedException: Unable to convert value "" from type 'java.lang.String' to type 'java.util.Date'; nested exception is java.lang.IllegalArgumentException]тут абсолютно все понятно. не понятно, как этого избежать. вот раньше она пишет: rejected value [04/15/2012,], то есть она даже сама мне собрала уже строки в массив. теперь надо ей как-то сказать, что это даты в таком-то формате, и да, бывают пустые ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2012, 15:58:12 |
|
||
|
spring 3 controller: не может принять объект в качестве параметра
|
|||
|---|---|---|---|
|
#18+
Проблема как раз в вашей форме, которая отправляет пустое значение, для поля Date. Чтобы получить null, нужно не отправлять вообще никакого значения с клиента. Если исправить на клиенте никакой возможности нет, то можно зарегистрировать конвертер для Spring MVC, чтобы он трактовал пустую строку как NULL: http://stackoverflow.com/questions/3046451/how-do-i-register-a-custom-conversion-service-in-spring-3-webflow-2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2012, 16:02:23 |
|
||
|
spring 3 controller: не может принять объект в качестве параметра
|
|||
|---|---|---|---|
|
#18+
аувв, Для всех "непонятных" строк должны быть зарегистированы editor`ы Код: java 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2012, 16:03:42 |
|
||
|
spring 3 controller: не может принять объект в качестве параметра
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, вот спасибо! а концептуально я нормально действую или как всегда чешу правой рукой левое ухо, и для поиска вообще все по-другому надо бы делать? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2012, 16:04:43 |
|
||
|
spring 3 controller: не может принять объект в качестве параметра
|
|||
|---|---|---|---|
|
#18+
vas0, о, тоже здорово, только из примерчика непонятно, как это привязывается именно к моим полям, по типу? может, мне так надо писать, Код: java 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2012, 16:08:32 |
|
||
|
spring 3 controller: не может принять объект в качестве параметра
|
|||
|---|---|---|---|
|
#18+
аувв, там есть несколько вариантов с разными сигнатурами. Тебе нужно приходящие строки превратить в объекты твоего типа. Придется написать свои Editor'ы, наследуясь от PropertyEditorSupport. Будет примерно следующее: Код: java 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2012, 16:18:19 |
|
||
|
spring 3 controller: не может принять объект в качестве параметра
|
|||
|---|---|---|---|
|
#18+
vas0, понял, мне нужно указывать название поля, иначе по пустой строке оно не догадается, что нужно именно едитор для даты искать... (жалость! могла бы догадаться по типу поля в объекте! эх!) и именно не массив дат, а просто дата, правильно? ну, я сейчас сам попробую ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2012, 16:26:21 |
|
||
|
spring 3 controller: не может принять объект в качестве параметра
|
|||
|---|---|---|---|
|
#18+
аувв, Нашел небольшой пример . То что у тебя массивы, на это по моему можно не смотреть. Регистрируй редакторы на класс, или на класс + название поля. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2012, 16:26:53 |
|
||
|
spring 3 controller: не может принять объект в качестве параметра
|
|||
|---|---|---|---|
|
#18+
vas0! огроменное спасибо. что с биндерами, что без них одинаково: не ругается, если нет ни одного пустого поля. иными словами, похоже, биндер для дат зарегистрирован по умолчанию; но момент именно с массивами у них просто не дописан. перейду, наверно, на наименования полей типа approvalDateFrom и approvalDateTo, думаю, сработает. спасибо еще раз ф ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2012, 17:46:04 |
|
||
|
spring 3 controller: не может принять объект в качестве параметра
|
|||
|---|---|---|---|
|
#18+
ауввdrsmаувв, что тут непонятно? пропущено... тут абсолютно все понятно. не понятно, как этого избежать. вот раньше она пишет: rejected value [04/15/2012,], то есть она даже сама мне собрала уже строки в массив. теперь надо ей как-то сказать, что это даты в таком-то формате, и да, бывают пустые я такие ужасы, как у тебя, со стороны extjs передаю постом не как форму, а сразу готовый json. потом это получается как-то так: Код: java 1. 2. 3. Json десериализируется jackson'ом, менее адово выглядит чем проперти эдиторы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2012, 17:46:50 |
|
||
|
spring 3 controller: не может принять объект в качестве параметра
|
|||
|---|---|---|---|
|
#18+
может, сказал фигню (без указания формата даты в биндере какая может быть нормальная работа), но с массивами точно бяка ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2012, 17:47:36 |
|
||
|
spring 3 controller: не может принять объект в качестве параметра
|
|||
|---|---|---|---|
|
#18+
drsmя такие ужасы, как у тебя, со стороны extjs передаю постом не как форму, а сразу готовый json.ща еще раз это попробую, у меня сразу не получилось ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2012, 17:51:59 |
|
||
|
spring 3 controller: не может принять объект в качестве параметра
|
|||
|---|---|---|---|
|
#18+
ауввdrsmя такие ужасы, как у тебя, со стороны extjs передаю постом не как форму, а сразу готовый json.ща еще раз это попробую, у меня сразу не получилосьхотел отрапортовать об удаче, ан нет org.codehaus.jackson.map.JsonMappingException: Can not construct instance of java.util.Date from String value '04/10/2012': not a valid representation (error: Can not parse date "04/10/2012": not compatible with any of standard forms ("yyyy-MM-dd'T'HH:mm:ss.SSSZ", "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", "EEE, dd MMM yyyy HH:mm:ss zzz", "yyyy-MM-dd")) оставлю на завтра :( всем спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2012, 18:33:02 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=37768926&tid=2131933]: |
0ms |
get settings: |
14ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
46ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
69ms |
get tp. blocked users: |
2ms |
| others: | 315ms |
| total: | 489ms |

| 0 / 0 |
