SpringBoot, JPA Hibarnet paginação com Data

21 respostas Resolvido
java
E

Como faço para trabalhar com Datas na paginação no SpringBoot ? Mesmo eu colocado tudo do tipo Date, quando faço um teste no Postman da um “Internal Server Erro”.

Minha Classe:

package com.eliveltonsantos.reservecar.domain;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;

import com.eliveltonsantos.reservecar.domain.enums.Movimentacao;
import com.eliveltonsantos.reservecar.domain.enums.Status;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;

@Entity
public class Reserva implements Serializable{
	private static final long serialVersionUID = 1L;
	
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	private Integer id;
	
	@JsonFormat(pattern="dd/MM/yyyy HH:mm")
	private Date data_hora_s;
	
	@JsonFormat(pattern="dd/MM/yyyy HH:mm")
	private Date data_hora_c;
	private String acomp;
	private String motivo;
	
	@ManyToOne
	@JoinColumn(name="carro_id")
	private Carro carro;
	
	@ManyToOne
	@JoinColumn(name="destino_id")
	private Destino destino;
	
	@JsonIgnore
	@ManyToOne
	@JoinColumn(name="motorista_id")
	private Motorista motorista;
	private Integer status;
	private Integer movimento; 
	
	public Reserva() {
	}


	public Reserva(Integer id, Date data_hora_s, Date data_hora_c, String acomp, String motivo, Carro carro,
			Destino destino, Motorista motorista, Status status, Movimentacao movimento) {
		super();
		this.id = id;
		this.data_hora_s = data_hora_s;
		this.data_hora_c = data_hora_c;
		this.acomp = acomp;
		this.motivo = motivo;
		this.carro = carro;
		this.setDestino(destino);;
		this.motorista = motorista;
		this.status = (status==null) ? null : status.getCod();
		this.movimento = (movimento==null) ? null: movimento.getCod();
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public Date getData_hora_s() {
		return data_hora_s;
	}

	public void setData_hora_s(Date data_hora_s) {
		this.data_hora_s = data_hora_s;
	}

	public Date getData_hora_c() {
		return data_hora_c;
	}

	public void setData_hora_c(Date data_hora_c) {
		this.data_hora_c = data_hora_c;
	}

	public String getAcomp() {
		return acomp;
	}

	public void setAcomp(String acomp) {
		this.acomp = acomp;
	}

	public String getMotivo() {
		return motivo;
	}

	public void setMotivo(String motivo) {
		this.motivo = motivo;
	}

	public Status getStatus() {
		return Status.toEnum(status);
	}

	public void setStatus(Status status) {
		this.status = status.getCod();
	}

	public Destino getDestino() {
		return destino;
	}

	public void setDestino(Destino destino) {
		this.destino = destino;
	}
	
	public Motorista getMotoristas() {
		return motorista;
	}

	public void setMotoristas(Motorista motoristas) {
		this.motorista = motoristas;
	}

	public Carro getCarro() {
		return carro;
	}

	public void setCarro(Carro carro) {
		this.carro = carro;
	}
	
	public Movimentacao getMovimento() {
		return Movimentacao.toEnum(movimento);
	}


	public void setMovimento(Movimentacao movimento) {
		this.movimento = movimento.getCod();
	}
	
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Reserva other = (Reserva) obj;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		return true;
	}
}

Meu Metodo na Classe Service:

public Page<Reserva> search(Date data_hora_s, Date data_hora_c, Integer page, Integer linesPerPage, String orderBy, String direction) {
		PageRequest pageRequest = PageRequest.of(page, linesPerPage, Direction.valueOf(direction), orderBy);
		return repo.search(data_hora_s, data_hora_c, pageRequest);	
	}

Meu método de Paginação na Classe Resource:

@RequestMapping(method=RequestMethod.GET)
		public ResponseEntity<Page<ReservaDTO>> findPage(
				@RequestParam(value="data_hora_s", defaultValue="") Date data_hora_s, 
				@RequestParam(value="data_hora_c", defaultValue="") Date data_hora_c, 
				@RequestParam(value="page", defaultValue="0") Integer page, 
				@RequestParam(value="linesPerPage", defaultValue="24") Integer linesPerPage, 
				@RequestParam(value="orderBy", defaultValue="nome") String orderBy, 
				@RequestParam(value="direction", defaultValue="ASC") String direction) {
			Page<Reserva> list = service.search(data_hora_s, data_hora_c, page, linesPerPage, orderBy, direction);
			Page<ReservaDTO> listDto = list.map(obj -> new ReservaDTO(obj));  
			return ResponseEntity.ok().body(listDto);
		}

Minha Classe ReservaRepository:

package com.eliveltonsantos.reservecar.repositories;


import java.util.Date;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import com.eliveltonsantos.reservecar.domain.Reserva;

@Repository
public interface ReservaRepository extends JpaRepository<Reserva, Integer> {
	
	@Query("SELECT obj FROM Reserva obj WHERE obj.data_hora_s = :data_hora_s AND obj.data_hora_c = :data_hora_c")
	Page<Reserva> search(
			 @Param("data_hora_s") Date data_hora_s,
			 @Param("data_hora_c") Date data_hora_c, 
			 Pageable pageRequest);
}

O ERRO:

org.hibernate.QueryException: could not resolve property: nome of: com.eliveltonsantos.reservecar.domain.Reserva
	at org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:73) ~[hibernate-core-5.4.6.Final.jar:5.4.6.Final]
	at org.hibernate.persister.entity.AbstractPropertyMapping.toType(AbstractPropertyMapping.java:67) ~[hibernate-core-5.4.6.Final.jar:5.4.6.Final]
	at org.hibernate.persister.entity.AbstractEntityPersister.toType(AbstractEntityPersister.java:2015) ~[hibernate-core-5.4.6.Final.jar:5.4.6.Final]
	at org.hibernate.hql.internal.ast.tree.FromElementType.getPropertyType(FromElementType.java:407) ~[hibernate-core-5.4.6.Final.jar:5.4.6.Final]
	at org.hibernate.hql.internal.ast.tree.FromElement.getPropertyType(FromElement.java:514) ~[hibernate-core-5.4.6.Final.jar:5.4.6.Final]
	at org.hibernate.hql.internal.ast.tree.DotNode.getDataType(DotNode.java:697) ~[hibernate-core-5.4.6.Final.jar:5.4.6.Final]
	at org.hibernate.hql.internal.ast.tree.DotNode.prepareLhs(DotNode.java:275) ~[hibernate-core-5.4.6.Final.jar:5.4.6.Final]
	at org.hibernate.hql.internal.ast.tree.DotNode.resolve(DotNode.java:215) ~[hibernate-core-5.4.6.Final.jar:5.4.6.Final]
	at org.hibernate.hql.internal.ast.HqlSqlWalker.resolve(HqlSqlWalker.java:1045) ~[hibernate-core-5.4.6.Final.jar:5.4.6.Final]
	at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.expr(HqlSqlBaseWalker.java:1290) ~[hibernate-core-5.4.6.Final.jar:5.4.6.Final]
	at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.orderExpr(HqlSqlBaseWalker.java:1864) ~[hibernate-core-5.4.6.Final.jar:5.4.6.Final]
	at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.orderExprs(HqlSqlBaseWalker.java:1661) ~[hibernate-core-5.4.6.Final.jar:5.4.6.Final]
	at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.orderClause(HqlSqlBaseWalker.java:1634) ~[hibernate-core-5.4.6.Final.jar:5.4.6.Final]
	at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:654) ~[hibernate-core-5.4.6.Final.jar:5.4.6.Final]
	at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:313) ~[hibernate-core-5.4.6.Final.jar:5.4.6.Final]
	at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:261) ~[hibernate-core-5.4.6.Final.jar:5.4.6.Final]
	at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:272) ~[hibernate-core-5.4.6.Final.jar:5.4.6.Final]
	at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:192) ~[hibernate-core-5.4.6.Final.jar:5.4.6.Final]
	at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:144) ~[hibernate-core-5.4.6.Final.jar:5.4.6.Final]
	at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:113) ~[hibernate-core-5.4.6.Final.jar:5.4.6.Final]
	at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:73) ~[hibernate-core-5.4.6.Final.jar:5.4.6.Final]
	at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:155) ~[hibernate-core-5.4.6.Final.jar:5.4.6.Final]
	at org.hibernate.internal.AbstractSharedSessionContract.getQueryPlan(AbstractSharedSessionContract.java:600) ~[hibernate-core-5.4.6.Final.jar:5.4.6.Final]
	at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:709) ~[hibernate-core-5.4.6.Final.jar:5.4.6.Final]
	at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:23) ~[hibernate-core-5.4.6.Final.jar:5.4.6.Final]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_181]
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_181]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_181]
	at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.8.0_181]
	at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:368) ~[spring-orm-5.2.0.RELEASE.jar:5.2.0.RELEASE]
	at com.sun.proxy.$Proxy97.createQuery(Unknown Source) ~[na:na]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_181]
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_181]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_181]
	at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.8.0_181]
	at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:314) ~[spring-orm-5.2.0.RELEASE.jar:5.2.0.RELEASE]
	at com.sun.proxy.$Proxy97.createQuery(Unknown Source) ~[na:na]
	at org.springframework.data.jpa.repository.query.AbstractStringBasedJpaQuery.createJpaQuery(AbstractStringBasedJpaQuery.java:150) ~[spring-data-jpa-2.2.0.RELEASE.jar:2.2.0.RELEASE]
	at org.springframework.data.jpa.repository.query.AbstractStringBasedJpaQuery.doCreateQuery(AbstractStringBasedJpaQuery.java:86) ~[spring-data-jpa-2.2.0.RELEASE.jar:2.2.0.RELEASE]
	at org.springframework.data.jpa.repository.query.AbstractJpaQuery.createQuery(AbstractJpaQuery.java:226) ~[spring-data-jpa-2.2.0.RELEASE.jar:2.2.0.RELEASE]
	at org.springframework.data.jpa.repository.query.JpaQueryExecution$PagedExecution.doExecute(JpaQueryExecution.java:175) ~[spring-data-jpa-2.2.0.RELEASE.jar:2.2.0.RELEASE]
	at org.springframework.data.jpa.repository.query.JpaQueryExecution.execute(JpaQueryExecution.java:88) ~[spring-data-jpa-2.2.0.RELEASE.jar:2.2.0.RELEASE]
	at org.springframework.data.jpa.repository.query.AbstractJpaQuery.doExecute(AbstractJpaQuery.java:154) ~[spring-data-jpa-2.2.0.RELEASE.jar:2.2.0.RELEASE]
	at org.springframework.data.jpa.repository.query.AbstractJpaQuery.execute(AbstractJpaQuery.java:142) ~[spring-data-jpa-2.2.0.RELEASE.jar:2.2.0.RELEASE]
	at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:618) ~[spring-data-commons-2.2.0.RELEASE.jar:2.2.0.RELEASE]
	at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:605) ~[spring-data-commons-2.2.0.RELEASE.jar:2.2.0.RELEASE]
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.2.0.RELEASE.jar:5.2.0.RELEASE]
	at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:80) ~[spring-data-commons-2.2.0.RELEASE.jar:2.2.0.RELEASE]
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.2.0.RELEASE.jar:5.2.0.RELEASE]
	at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:353) ~[spring-tx-5.2.0.RELEASE.jar:5.2.0.RELEASE]
	at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:99) ~[spring-tx-5.2.0.RELEASE.jar:5.2.0.RELEASE]
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.2.0.RELEASE.jar:5.2.0.RELEASE]
	at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:139) ~[spring-tx-5.2.0.RELEASE.jar:5.2.0.RELEASE]
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.2.0.RELEASE.jar:5.2.0.RELEASE]
	at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:149) ~[spring-data-jpa-2.2.0.RELEASE.jar:2.2.0.RELEASE]
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.2.0.RELEASE.jar:5.2.0.RELEASE]
	at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:93) ~[spring-aop-5.2.0.RELEASE.jar:5.2.0.RELEASE]
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.2.0.RELEASE.jar:5.2.0.RELEASE]
	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212) ~[spring-aop-5.2.0.RELEASE.jar:5.2.0.RELEASE]
	at com.sun.proxy.$Proxy120.search(Unknown Source) ~[na:na]
	at com.eliveltonsantos.reservecar.services.ReservaService.search(ReservaService.java:58) ~[classes/:na]
	at com.eliveltonsantos.reservecar.services.ReservaService$$FastClassBySpringCGLIB$$46378542.invoke(<generated>) ~[classes/:na]
	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.2.0.RELEASE.jar:5.2.0.RELEASE]
	at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:685) ~[spring-aop-5.2.0.RELEASE.jar:5.2.0.RELEASE]
	at com.eliveltonsantos.reservecar.services.ReservaService$$EnhancerBySpringCGLIB$$56bde90e.search(<generated>) ~[classes/:na]
	at com.eliveltonsantos.reservecar.resources.ReservaResource.findPage(ReservaResource.java:66) ~[classes/:na]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_181]
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_181]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_181]
	at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.8.0_181]
	at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190) ~[spring-web-5.2.0.RELEASE.jar:5.2.0.RELEASE]
	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138) ~[spring-web-5.2.0.RELEASE.jar:5.2.0.RELEASE]
	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.2.0.RELEASE.jar:5.2.0.RELEASE]
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:888) ~[spring-webmvc-5.2.0.RELEASE.jar:5.2.0.RELEASE]
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:793) ~[spring-webmvc-5.2.0.RELEASE.jar:5.2.0.RELEASE]
	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.2.0.RELEASE.jar:5.2.0.RELEASE]
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040) ~[spring-webmvc-5.2.0.RELEASE.jar:5.2.0.RELEASE]
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943) ~[spring-webmvc-5.2.0.RELEASE.jar:5.2.0.RELEASE]
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.2.0.RELEASE.jar:5.2.0.RELEASE]
	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.2.0.RELEASE.jar:5.2.0.RELEASE]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:634) ~[tomcat-embed-core-9.0.27.jar:9.0.27]
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.2.0.RELEASE.jar:5.2.0.RELEASE]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) ~[tomcat-embed-core-9.0.27.jar:9.0.27]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[tomcat-embed-core-9.0.27.jar:9.0.27]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.27.jar:9.0.27]
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.27.jar:9.0.27]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.27.jar:9.0.27]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.27.jar:9.0.27]
	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.2.0.RELEASE.jar:5.2.0.RELEASE]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.0.RELEASE.jar:5.2.0.RELEASE]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.27.jar:9.0.27]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.27.jar:9.0.27]
	at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.2.0.RELEASE.jar:5.2.0.RELEASE]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.0.RELEASE.jar:5.2.0.RELEASE]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.27.jar:9.0.27]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.27.jar:9.0.27]
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.2.0.RELEASE.jar:5.2.0.RELEASE]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.0.RELEASE.jar:5.2.0.RELEASE]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.27.jar:9.0.27]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.27.jar:9.0.27]
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) ~[tomcat-embed-core-9.0.27.jar:9.0.27]
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) [tomcat-embed-core-9.0.27.jar:9.0.27]
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:526) [tomcat-embed-core-9.0.27.jar:9.0.27]
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) [tomcat-embed-core-9.0.27.jar:9.0.27]
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) [tomcat-embed-core-9.0.27.jar:9.0.27]
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) [tomcat-embed-core-9.0.27.jar:9.0.27]
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) [tomcat-embed-core-9.0.27.jar:9.0.27]
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408) [tomcat-embed-core-9.0.27.jar:9.0.27]
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) [tomcat-embed-core-9.0.27.jar:9.0.27]
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:861) [tomcat-embed-core-9.0.27.jar:9.0.27]
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1579) [tomcat-embed-core-9.0.27.jar:9.0.27]
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.27.jar:9.0.27]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [na:1.8.0_181]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [na:1.8.0_181]
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.27.jar:9.0.27]
	at java.lang.Thread.run(Unknown Source) [na:1.8.0_181]

21 Respostas

L

O valor default do atributo orderBy está como nome e esse atributo não parece existir na entidade Reserva.

E

Obrigatoriamente tem que existir esse atributo “nome”? Eu não tenho a necessidade dele na minha entidade.

L

Uai, se é assim, pq ele está sendo usado no orderBy da consulta como default?

E

Puuuuta Mano…Eu não vi que na Classe Resource o
@RequestParam(value=“orderBy”, defaultValue=“nome”) String orderBy.

Visto que o correto é:

@RequestParam(value=“orderBy”, defaultValue=“data_hora_s”) String orderBy.

Poxa…Vlw mesmo!

Mas ainda tem um problema.

Na URL ele não aceita dados com um “espaço” se eu colocar a Data 25/10/2018 11:30 ele não aceita. Eu tenho uma classe para ajustar isso na URL com o metodo decodeParam, mas eu estou trabalhando com Datas e não com String, no caso eu teria que converter.

No Postman ele não traz a minha reserva que eu tenho salvo.

{

<strong>"content": [],</strong>

“pageable”: {

“sort”: {

“sorted”: true,

“unsorted”: false,

“empty”: false

},

“offset”: 0,

“pageNumber”: 0,

“pageSize”: 24,

“paged”: true,

“unpaged”: false

},

“totalPages”: 0,

“last”: true,

“totalElements”: 0,

“size”: 24,

“number”: 0,

“sort”: {

“sorted”: true,

“unsorted”: false,

“empty”: false

},

“numberOfElements”: 0,

“first”: true,

“empty”: true

}
E

E mudar minha Query para Maior e menor que a data que eu estou buscando

L

Você está passando a data na URL? Manda um exemplo de URL que vc está testando.

E

localhost:8080/reservas/?data_hora_s=25/10/2018 11:30&data_hora_c=25/10/2018 13:30

L

Quando for passar esse tipo de dado na URL, tem que fazer o encode. Essa data, por exemplo, ficaria assim: 25%2F10%2F2018%2011%3A30.

E

Então mano…

Essa é a classe que eu tenho para fazer isso pra mim.
package com.eliveltonsantos.reservecar.resources.utils;

import java.io.UnsupportedEncodingException;

import java.net.URLDecoder;

import java.util.ArrayList;

import java.util.List;

public class URL {

public static String decodeParam(String s) {
	try {
		return URLDecoder.decode(s, "UTF-8");
	} catch (UnsupportedEncodingException e) {
		return "";
	}
}

public static List<Integer> decodeIntList(String s){
	String[] vet = s.split(",");
	List<Integer> list = new ArrayList<>();
	for(int i=0; i<vet.length; i++) {
		list.add(Integer.parseInt(vet[i]));
	}
	return list;
}

}

E No resource eu faço essa linha antes de passar para minha classe service e retornar.

String data_hora_sDecoded = URL.decodeParam(data_hora_s);
String data_hora_cDecoded = URL.decodeParam(data_hora_c);

Mas os meus campos são do tipo Date e o decode só é String.

L

O decode é para receber, o encode, como demonstrei, é para enviar, ou seja, realizar a requisição.

E

Mudei minha Classe URL para encode.

No meu resource

String data_hora_sEncoded = URL.encodeParam(data_hora_s);
String data_hora_cEnecoded = URL.encodeParam(data_hora_c);

The method encodeParam(String) in the type URL is not applicable for the arguments (Date)
tradução: O método encodeParam (String) no tipo URL não é aplicável aos argumentos (Data)

L

Vc não precisa mudar nada na sua classe resource, pois o parâmetro já é um Date, o problema é no valor enviado lah do postman. Quando vc faz a requisição no postman colocando a data com espaços, dá algum erro?

E

Ele da o status: 200 OK
Esse é meu retorno:

{

content: [],

pageable: {

sort: {

sorted: true,

unsorted: false,

empty: false

},

offset: 0,

pageNumber: 0,

pageSize: 24,

paged: true,

unpaged: false

},

totalElements: 0,

totalPages: 0,

last: true,

size: 24,

number: 0,

sort: {

sorted: true,

unsorted: false,

empty: false

},

numberOfElements: 0,

first: true,

empty: true

}
L

E a data chega preenchida?

E

Não, não chega nenhum dado preenchido! nem mesmo as outras informações.

L

E se vc fizer a requisição no postman com essa URL:

localhost:8080/reservas/?data_hora_s=25%2F10%2F2018%2011%3A30&data_hora_c=25%2F10%2F2018%2013%3A30

Veja se as datas serão preenchidas.

E

Nada, o mesmo erro!

{

content: [],

pageable: {

sort: {

sorted: true,

unsorted: false,

empty: false

},

offset: 0,

pageSize: 24,

pageNumber: 0,

paged: true,

unpaged: false

},

last: true,

totalPages: 0,

totalElements: 0,

size: 24,

number: 0,

sort: {

sorted: true,

unsorted: false,

empty: false

},

numberOfElements: 0,

first: true,

empty: true

}
L
Solucao aceita

O problema das datas não estarem sendo preenchidas, provavelmente, será por causa do formato. Defina um pattern para os parametros de data:

@RequestParam(value="data_hora_s")
@DateTimeFormat(pattern = "dd/MM/yyyy HH:mm") Date data_hora_s

Tire esse default value das datas também. Se não vier datas, eles serão nulas. Com isso, basta vc tratar na consulta msm.

E

Agora funcionou!

content: [

{

id: 1,

data_hora_s: 25/10/2018 14:30,

data_hora_c: 25/10/2018 16:30,

acomp: Adao,

motivo: Viagem,

carro: {

id: 1,

nome: PRISMA,

placa: QQX-5212,

entidade: {

id: 1,

nome: TESTE,

cod_uni: 220,

telefones: [

[telefone removido]

]

}

},

destino: {

id: 1,

nome: Centro,

enderecos: [

{

id: 1,

logadouro: Rua B,

numero: 300,

complemento: Casa,

bairro: Barreirinhas,

cep: 47811-003,

cidade: {

id: 1,

nome: Barreiras,

estado: {

id: 1,

nome: Bahia

}

}

}

]

},

motorista: {

id: 1,

nome_completo: Elivelton de Oliveira Santos,

email: [email removido],

setor: {

id: 1,

nome: TI

},

telefones: [

77999xxxxx,

77210xxxxx

],

matricula: xxxx,

nivel_acesso: ADMINISTRADOR,

},

status: RESERVADO,

movimento: PENDENTE

}

],

pageable: {

sort: {

sorted: true,

unsorted: false,

empty: false

},

offset: 0,

pageNumber: 0,

pageSize: 24,

paged: true,

unpaged: false

},

last: true,

totalPages: 1,

totalElements: 1,

size: 24,

number: 0,

sort: {

sorted: true,

unsorted: false,

empty: false

},

numberOfElements: 1,

first: true,

empty: false

}
E

Vlwzão! Muito Obrigado irmão. Ajudou de Mais

L

Top! Realmente trabalhar com datas tem esses porém. O que recomendo é que trabalhe com o padrão ISO, com isso, ficará tudo padronizado.

Marca a resposta como solução depois. vlw!

Criado 4 de novembro de 2019
Ultima resposta 4 de nov. de 2019
Respostas 21
Participantes 2