Posts

Showing posts with the label Spring

Spring jpa criteria example

 import jakarta.persistence.EntityManager; import jakarta.persistence.TypedQuery; import jakarta.persistence.criteria.CriteriaBuilder; import jakarta.persistence.criteria.CriteriaQuery; import jakarta.persistence.criteria.Join; import jakarta.persistence.criteria.Path; import jakarta.persistence.criteria.Predicate; import jakarta.persistence.criteria.Root; import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.Month; import java.util.List; import java.util.Objects; import org.springframework.data.jpa.domain.Specification; import org.springframework.stereotype.Component; @Component public class TransactionCriteria { private static final String TRANSACTION_POINT = "transactionPoint"; private static final String EARNED_POINTS = "earnedPoints"; private static final String CREATED_AT = "createdAt"; private static final String OPERATION_TYPE = "operationType"; private static final String CUSTOMER_ID = ...

Exception handling mechanism prompt for spring boot project

 ## Exception Mechanism — Prompt (Spring Boot Microservice) ### Goal Build a standardized, i18n-enabled exception mechanism in a Spring Boot microservice that returns error responses aligned with HTTP status codes. --- ### Package structure ``` exception/ ├── base/ │ ├── BaseErrorService.java (interface) │ ├── BaseErrorEnum.java (common/base error codes) │ ├── BaseException.java (abstract exception) │ ├── BaseErrorResponseDto.java (API response DTO) │ └── {Specific}Exception.java (optional — domain-specific, extends BaseException) ├── {ServiceName}ErrorEnum.java (project-specific error enum) ├── {ServiceName}Exception.java (general domain exception) ├── {Domain}Exception.java (domain exceptions — as needed) ├── ClientException.java (Feign/external error wrapper — SEPARATE from BaseException) └── GlobalExceptionHandler.java (@RestControllerAdvice) ``` --- ### 1. `BaseErrorService` (interface) The contract that al...

Resolver for token headers

 Header values in class:  @Data  @Builder  @NoArgsConstructor  @AllArgsConstructor  public class UserClaims {        private Long userId;      private String customerId;      private String taxId;      private Boolean isDirector;      private String personalCode;  } Resolver config  @Configuration  @RequiredArgsConstructor  public class MethodArgumentResolverConfig implements WebMvcConfigurer {        @Override      public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {          argumentResolvers.add(userClaimsResolver());      }        @Bean      public UserClaimsResolver userClaimsResolver() {          return new UserClaimsResolver();      }    } Resolver clas...

AuditableDate for entities in jpa

 import jakarta.persistence.Column;  import jakarta.persistence.EntityListeners;  import jakarta.persistence.MappedSuperclass;  import java.io.Serial;  import java.io.Serializable;  import java.time.LocalDateTime;  import lombok.Getter;  import lombok.Setter;  import org.springframework.data.annotation.CreatedDate;  import org.springframework.data.annotation.LastModifiedDate;  import org.springframework.data.jpa.domain.support.AuditingEntityListener;    @Getter  @Setter  @MappedSuperclass  @EntityListeners(AuditingEntityListener.class)  public class AuditableDate implements Serializable {        @Serial      private static final long serialVersionUID = 1L;        @CreatedDate      @Column(updatable = false)      private LocalDateTime createdAt;        @LastModifiedDate      private Loc...

Spring boot kafka job example

application-kafka.yml file:  spring:    kafka:      listener:        ack-mode: manual      consumer:        key-deserializer: org.springframework.kafka.support.serializer.ErrorHandlingDeserializer        value-deserializer: org.springframework.kafka.support.serializer.ErrorHandlingDeserializer        properties:          spring.json.use.type.headers: false          spring.json.trusted.packages: com.example.*          spring.deserializer.key.delegate.class: org.apache.kafka.common.serialization.StringDeserializer          spring.deserializer.value.delegate.class: org.springframework.kafka.support.serializer.JsonDeserializer        auto-offset-reset: latest        enable-auto-commit: false        operation-re...

.csv faylda melumati verib liqubase ile bazaya insert etmek

 bu ad_groups.csv faylda olan data   :    id;name;description 1;HEAD_OF_CASHIER;Head of Cashier 2;Cashier;Cashier 3;Teller;Teller 4;KAD;Underwriter 5;HEAD_OF_TELLER;Head of Teller bu ise liqubase faylda de tetbiqi : <loadData file="config/liquibase/ad_groups.csv"                   separator=";"                   tableName="active_directory_group"/>

timezone ile bagli Jackson deserializableda problem

  demeli date save olanda duzgun vaxtla save olur bazaya  ,ama qayidanda jackson deserializable levelinde ilishir ve 4 saat dala gorsenir swaggerde , bunun helli uchun: bu problem hem @CreationTimestamp ve @UpdateTimestamp da hem de el ile daxil olunan date larda da bash verir app propertiese 2 setr eleve edirik jackson serizable-deserizable emelyati uchun : spring.jackson.serialization.write-dates-with-zone-id=true spring.jackson.time-zone=GMT+4

java ile appden ssl olan hostlara qoshulma uchun sertifikat meselesi

1 ci usul JVM in cacertine elave etmek Windows:  keytool -import -alias cert_alias -file cert.cer -keystore "C:\Program Files\Java\jdk-11.0.9\lib\security\cacerts kodu ise changeit verilir , kod shertidir bashqa sheyde vermek olar lazim olan sertifikati  uygun saydan yukleyirik sora onun kompdaki pathda bu komandi verilir , meselen download foldere dushubse ora gedib yuxaridaki commandi run edirik cmd de Mac: import cert into jvm 17(other versions same as well)  1.  cd /Library/Java/JavaVirtualMachines/jdk-17.0.5.jdk/Contents/Home/lib/security  2. sudo keytool -import -file ~/Documents/certs/fusion.cer -keystore /Library/Java/JavaVirtualMachines/jdk-17.0.5.jdk/Contents/Home/lib/security/cacerts -alias "fusion" 2 ci usul. appin folderinde trustStore yaradib, jvmi override etmek Yuxaridaki numunelerde serverin certifikati jvm in cacertine elave olunur. Amma jvmin default cacertini override edib , appin ichinde cacert yaratmaq mumkundur: keytool -import -trustcacer...

jpa entitylerde get zamani relationa bagli rekursiyanin mapstruct istifade ederken helli

 mapstructda map ederken ozu arxada ozune lazimi metodlar generate edir, ve bu metodlarin ichinde rekursiya yaradacaq fildleri biz ozumuz ignoe ede bilerik @Mapping(target = "city.stores", ignore = true)     @Mapping(target = "partner.stores", ignore = true)     StoreResponseDto toStoreResponseDto(Store store);     @Mapping(target = "partners", ignore = true)     CategoryResponseDto categoryToCategoryResponseDto(Category category);   burada 1 ci methodu ozum yazmisham dtonun ichinde rekursiyaya sebeb olacaq fileldi ignore edirem , 2 ci metodu ise arxada ozu generate edir ve ordada biz dolayi yolla entity elaqesi ile rekursiyaya dushe bilirik deye partners filedini ignore edirem

Hibernate Projection approach in project

With using this approach we can get any of field of entity and this way is more efficient rather than get all entity fileds , example in below: @Repository public interface CompanyRepo extends JpaRepository<Company, Long> {     Integer countById(long id);     <T extends CompanyViewProtocol> Optional<T> findById(long id, Class<T> type); } public interface CompanyViewProtocol { } public interface ContactDetailView extends CompanyViewProtocol {     CompanyContactDetail getContactDetail(); } in there companyRepo.findById(1L,ContactDetailView.class)   gives us CompanyContactDetail 

configuration for reading static.messages properties files in project

Image
Assume that we have Resource Bundle 'message' and Resource Bundle 'validation' folders (there are properties files inside them), under static.messages folder , then we can configure for read this properties from resource folders like that:  @Bean     public ResourceBundleMessageSource messageSource() {         ResourceBundleMessageSource source = new ResourceBundleMessageSource();         source.setBasenames("static/messages/message", "static/messages/validation");         source.setDefaultLocale(new Locale("az"));         source.setUseCodeAsDefaultMessage(true);         source.setDefaultEncoding("UTF-8");         return source;     }     @Bean     public LocalValidatorFactoryBean getValidator() {         LocalValidatorFactoryBean bean = new LocalValidatorFactoryBean();         bean.se...

make update process without setter methods with BeanUtils.copyProperties(source,target,editableColumns)

This is just code sample that is why some imports some injections are missed! import static com.company.project.util.EntityUtil.copyPropertiesExceptId;  public class OfficeServiceImpl implementes OfficeService{ public OfficePhoto update(Long companyId, Long officeId, Long id, OfficePhotoEditableColumn      officePhotoEditableColumn) throws EntityNotFountException {     OfficePhoto byId = findById(companyId, officeId, id);     copyPropertiesExceptId(byId, officePhotoEditableColumn, OfficePhotoEditableColumn.class);     return officePhotoRepo.save(byId); } } this method does update proses without using any setter methods: we just give (target,source,editableColumsObject) : public class EntityUtil{ public static void copyPropertiesExceptId(BaseEntity target, BaseEntity source, Class editableColumns) {     long targetOriginalId = target.getId();     BeanUtils.copyProperties(source, target, editableColumns);     ...

removing object from many side in @OneToMany relation

  @ManyToOne (fetch = FetchType. LAZY ) private Company company ; @PreRemove private void preRemove () { // Office silinmezden once Company ile olan elaqesini kesmek lazimdir this . company .getOffices().remove( this ) ; } using this @PreRemove in Office entity which is many side in @OneToMany relation adi halda silmeye chalisanda error verirki one terefi silinmeyine icaze vermir ona gore de bu annotation ile hell etmek olur problemi problemi bunnla hell etmek olar, amma bu yaxsi solutuon deyil , chunki eksine One da olan datani silmek isteyende ConcurrentMapp... nese qeribe error verir bunun evezine , burda bash veren emelyati delete metodunda etmek lazimdir

object to json , json to object for controller integration testing

import com.fasterxml.jackson.core.JsonProcessingException ; import com.fasterxml.jackson.databind.ObjectMapper ; import com.fasterxml.jackson.databind.SerializationFeature ; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule ; public class TestsHelper { public static String getJsonString (Object object) throws JsonProcessingException { ObjectMapper mapper = new ObjectMapper() ; mapper.registerModule( new JavaTimeModule()) ; mapper.disable(SerializationFeature. WRITE_DATES_AS_TIMESTAMPS ) ; return mapper.writeValueAsString(object) ; } public static < T > T getObjectFromJson (String json , Class< T > type) throws JsonProcessingException{ ObjectMapper mapper = new ObjectMapper() ; mapper.registerModule( new JavaTimeModule()) ; mapper.disable(SerializationFeature. WRITE_DATES_AS_TIMESTAMPS ) ; return mapper.readValue(json , type) ; } } use case in testing class : private OfficePhoto request...