Size: a a a

Java/Kotlin Web and more

2020 October 30

RS

Ruslan Stelmachenko in Java/Kotlin Web and more
 ‌‌Gleb Pilipets
А можно вопрос про POJO задать?
Как избежать наименования геттеров как название переменных?

ну то есть у меня было, например "int var;"
"int getMyVar() { ... }" и это не валидный POJO обьект, но как-то можно изменить, оставив имя геттера, которое я хочу?

Может, как-то bind сделать к полю или предоставить сериализацию?
что заставляет вас думать, что это не валидный POJO?
источник

 P

 ‌‌Gleb Pilipets... in Java/Kotlin Web and more
Ruslan Stelmachenko
что заставляет вас думать, что это не валидный POJO?
Пункт 2 + ошибка при попытке возврата из хендлера в контроллере.

A POJO is just a plain, old Java Bean with the restrictions removed. Java Beans must meet the following requirements:

1. Default no-arg constructor
2. Follow the Bean convention of getFoo (or isFoo for booleans) and setFoo methods for a mutable attribute named foo; leave off the setFoo if foo is immutable.
3. Must implement java.io.Serializable
https://stackoverflow.com/questions/3527264/how-to-create-a-pojo
источник

RS

Ruslan Stelmachenko in Java/Kotlin Web and more
 ‌‌Gleb Pilipets
Пункт 2 + ошибка при попытке возврата из хендлера в контроллере.

A POJO is just a plain, old Java Bean with the restrictions removed. Java Beans must meet the following requirements:

1. Default no-arg constructor
2. Follow the Bean convention of getFoo (or isFoo for booleans) and setFoo methods for a mutable attribute named foo; leave off the setFoo if foo is immutable.
3. Must implement java.io.Serializable
https://stackoverflow.com/questions/3527264/how-to-create-a-pojo
атрибут != филд

название филда не имеет никакого значения для соблюдения конвенции Java Bean
источник

 P

 ‌‌Gleb Pilipets... in Java/Kotlin Web and more
Ruslan Stelmachenko
атрибут != филд

название филда не имеет никакого значения для соблюдения конвенции Java Bean
Хм..., сейчас попробую тогда ещё раз.
источник

 P

 ‌‌Gleb Pilipets... in Java/Kotlin Web and more
Ruslan Stelmachenko
атрибут != филд

название филда не имеет никакого значения для соблюдения конвенции Java Bean
А почему тогда геттеры важны для new ObjectMapper().readValue(content, valueType); ??
Без корректного имени геттера пишет, что поле не найдено...
источник

 P

 ‌‌Gleb Pilipets... in Java/Kotlin Web and more
public double getVal1() {
     return val;
  }

localhost:8080/test_service/get_temp?temp={"val":234324.2342342, "val2":45654.645645645}

Unrecognized field "val" (class test_service.structures.Temp), not marked as ignorable (one known property: "val2"])
источник

RS

Ruslan Stelmachenko in Java/Kotlin Web and more
Потому что Jackson сопоставляет имя филда в JSON имени атрибута в бине. А имя атрибута определяется именем геттера. Не филда.
источник

 P

 ‌‌Gleb Pilipets... in Java/Kotlin Web and more
Ruslan Stelmachenko
Потому что Jackson сопоставляет имя филда в JSON имени атрибута в бине. А имя атрибута определяется именем геттера. Не филда.
Спасибо, я понял. Дальше погуглю, как это можно обойти.
источник

RS

Ruslan Stelmachenko in Java/Kotlin Web and more
"Атрибут" бина это абстрактное понятие. В коде его нигде нет.
источник
2020 October 31

AE

Alexandr Emelyanov in Java/Kotlin Web and more
Ruslan Stelmachenko
Потому что Jackson сопоставляет имя филда в JSON имени атрибута в бине. А имя атрибута определяется именем геттера. Не филда.
Там же вроде как в хибере настроить можно куда смотреть, на акцессор или поле?
источник

RS

Ruslan Stelmachenko in Java/Kotlin Web and more
Alexandr Emelyanov
Там же вроде как в хибере настроить можно куда смотреть, на акцессор или поле?
Так а причем тут хибер, если речь шла про Jackson? :) В Jackson, кстати, вроде тоже можно.

Но вообще, изначально я отвечал на вопрос про JavaBean и пытался донести мысль, что название приватного филда в концепции JavaBean не имеет значения. Да, обычно филд называют так же, как и геттер/сеттер, но это лишь конвенция для удобства программиста. Библиотеке же, которая работает со стандартном JavaBean, глубоко плевать, как там названо поле. Соответствующего геттеру/сеттеру поля вообще может не быть в классе. Это может быть, например, мапа, в которую геттер/сеттер делегируют. Или что угодно еще. Ибо инкапсуляция. Все утилиты, заявляющие, что работают с JavaBean, обязаны смотреть на геттеры/сеттеры, а не на поля. И понятие "атрибута" (по-моему все же обычно это называют "property") имеет непосредственное отношение к геттерам/сеттерам, но не филдам. Например, если в классе есть методы getFoo()/setFoo(val), то можно сказать, что в этом JavaBean есть property foo. При этом есть ли поле с таким же именем в этом классе не имеет никакого значения.

Вот что я пытался донести. Без привязки к конкретной либе. А так да, у многих либ есть поддержка не только JavaBean, но и рефлексии по полям или каких-то иных способов работы с объектами.
источник

AK

Aleksei Koltcov in Java/Kotlin Web and more
Ruslan Stelmachenko
Так а причем тут хибер, если речь шла про Jackson? :) В Jackson, кстати, вроде тоже можно.

Но вообще, изначально я отвечал на вопрос про JavaBean и пытался донести мысль, что название приватного филда в концепции JavaBean не имеет значения. Да, обычно филд называют так же, как и геттер/сеттер, но это лишь конвенция для удобства программиста. Библиотеке же, которая работает со стандартном JavaBean, глубоко плевать, как там названо поле. Соответствующего геттеру/сеттеру поля вообще может не быть в классе. Это может быть, например, мапа, в которую геттер/сеттер делегируют. Или что угодно еще. Ибо инкапсуляция. Все утилиты, заявляющие, что работают с JavaBean, обязаны смотреть на геттеры/сеттеры, а не на поля. И понятие "атрибута" (по-моему все же обычно это называют "property") имеет непосредственное отношение к геттерам/сеттерам, но не филдам. Например, если в классе есть методы getFoo()/setFoo(val), то можно сказать, что в этом JavaBean есть property foo. При этом есть ли поле с таким же именем в этом классе не имеет никакого значения.

Вот что я пытался донести. Без привязки к конкретной либе. А так да, у многих либ есть поддержка не только JavaBean, но и рефлексии по полям или каких-то иных способов работы с объектами.
А есть реальные причины называть поля одним именем, а геттеры и сеттеры другим? Больше похоже на способ прострелить себе коленку в дальнейшем.
источник

RS

Ruslan Stelmachenko in Java/Kotlin Web and more
Aleksei Koltcov
А есть реальные причины называть поля одним именем, а геттеры и сеттеры другим? Больше похоже на способ прострелить себе коленку в дальнейшем.
Как правило, нет. Специально это делать точно не нужно)
источник

AE

Alexandr Emelyanov in Java/Kotlin Web and more
Ruslan Stelmachenko
Так а причем тут хибер, если речь шла про Jackson? :) В Jackson, кстати, вроде тоже можно.

Но вообще, изначально я отвечал на вопрос про JavaBean и пытался донести мысль, что название приватного филда в концепции JavaBean не имеет значения. Да, обычно филд называют так же, как и геттер/сеттер, но это лишь конвенция для удобства программиста. Библиотеке же, которая работает со стандартном JavaBean, глубоко плевать, как там названо поле. Соответствующего геттеру/сеттеру поля вообще может не быть в классе. Это может быть, например, мапа, в которую геттер/сеттер делегируют. Или что угодно еще. Ибо инкапсуляция. Все утилиты, заявляющие, что работают с JavaBean, обязаны смотреть на геттеры/сеттеры, а не на поля. И понятие "атрибута" (по-моему все же обычно это называют "property") имеет непосредственное отношение к геттерам/сеттерам, но не филдам. Например, если в классе есть методы getFoo()/setFoo(val), то можно сказать, что в этом JavaBean есть property foo. При этом есть ли поле с таким же именем в этом классе не имеет никакого значения.

Вот что я пытался донести. Без привязки к конкретной либе. А так да, у многих либ есть поддержка не только JavaBean, но и рефлексии по полям или каких-то иных способов работы с объектами.
Вчитайся, я написал что так же как в хибере
источник

AE

Alexandr Emelyanov in Java/Kotlin Web and more
Aleksei Koltcov
А есть реальные причины называть поля одним именем, а геттеры и сеттеры другим? Больше похоже на способ прострелить себе коленку в дальнейшем.
Ну если фантазировать, то например что бы по имени акцессора не подобрать имя приватного поля и не получил доступ рефлексией
источник

RS

Ruslan Stelmachenko in Java/Kotlin Web and more
Alexandr Emelyanov
Вчитайся, я написал что так же как в хибере
Да, действительно. Не заметил, простите. Не хватает пары запятых)
источник

AE

Alexandr Emelyanov in Java/Kotlin Web and more
Ruslan Stelmachenko
Да, действительно. Не заметил, простите. Не хватает пары запятых)
Возможно)
источник

RS

Ruslan Stelmachenko in Java/Kotlin Web and more
Это кстати на тему о важности знаков препинания, которую недавно тут обсуждали.

Я прочитал вот так:
"Там же, вроде как, в хибере настроить можно, куда смотреть: на акцессор или поле?"

Словосочетание "вроде как" я воспринял, как уточнение.

В то время, как вы имели ввиду:
"Там же вроде, как в хибере - настроить можно, куда смотреть: на акцессор или поле?"

В общем, классическое "казнить нельзя помиловать". :)
источник

ON

Oleg Nyrkov in Java/Kotlin Web and more
да половина программистов аутисты, с людьми вообще процентов 10 только могут общаться, а тут запятые :)
источник

AE

Alexandr Emelyanov in Java/Kotlin Web and more
Oleg Nyrkov
да половина программистов аутисты, с людьми вообще процентов 10 только могут общаться, а тут запятые :)
Вот это уже обидно было
источник