NotReadablePropertyException:无效属性';id';bean类[java.util.LinkedHashMap]
我正试图在springMVC应用程序中创建一个抽象服务。我的数据流*完美地通过我的层,但我的持久性(抽象)无法找到保存/删除/更新数据库的方法,以下是类:NotReadablePropertyException:无效属性';id';bean类[java.util.LinkedHashMap],java,spring,spring-mvc,spring-ioc,Java,Spring,Spring Mvc,Spring Ioc,我正试图在springMVC应用程序中创建一个抽象服务。我的数据流*完美地通过我的层,但我的持久性(抽象)无法找到保存/删除/更新数据库的方法,以下是类: abstract class BaseServiceImpl<T, ID extends Serializable> implements BaseService<T, ID> { protected abstract BaseRepository<T, ID> getRepository(); pr
abstract class BaseServiceImpl<T, ID extends Serializable>
implements BaseService<T, ID> {
protected abstract BaseRepository<T, ID> getRepository();
private BaseRepository<T, ID> repository;
public BaseServiceImpl(BaseRepository<T, ID> repository){
this.repository = repository;
}
public List<T> findAll(){
return getRepository().findAll();
}
public T find(ID id){
return getRepository().findOne(id);
}
public T save(T persisted){
return this.repository.save(persisted);
}
public void delete(ID id){
getRepository().delete(id);
}
public long count(){
return getRepository().count();
}
public boolean exists(ID id){
return getRepository().exists(id);
}
}
//--
//--
@NoRepositoryBean
公共接口库
扩展存储库{
列出findAll();
长计数();
作废删除(ID);
T保存(ts);
T findOne(ID);
存在布尔值(ID);
作废删除(T删除);
}
//--
@存储库
公共接口医学知识库
扩展BaseRepository{
}
我收到500个状态错误,我的tocatlog显示以下消息:
严重:路径为[/tavalendo]的上下文中Servlet[TavalendDispatcherservlet]的Servlet.service()引发异常[请求处理失败;嵌套异常为org.springframework.beans.NotReadablePropertyException:bean类[java.util.LinkedHashMap]的属性“id”无效]:回退访问期间找不到属性字段!]根本原因
org.springframework.beans.NotReadablePropertyException:bean类[java.util.LinkedHashMap]的属性“id”无效:在回退访问期间找不到属性的字段!
位于org.springframework.data.util.DirectFieldAccessFallbackBeanWrapper.getPropertyValue(DirectFieldAccessFallbackBeanWrapper.java:56)
位于org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
位于org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956)
位于org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
位于org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423)
位于org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079)
位于org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625)
位于org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
位于org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
运行(Thread.java:745)
有人能解释发生了什么吗?春天似乎找不到医学的id领域:
Invalid property 'id' of bean class [java.util.LinkedHashMap]: Could not find field for property during fallback access!]
实际上,Medicine似乎没有
id
字段,因此需要添加它 Spring似乎找不到医学的id领域:
Invalid property 'id' of bean class [java.util.LinkedHashMap]: Could not find field for property during fallback access!]
实际上,Medicine似乎没有id
字段,因此需要添加它 1)将对象转换为字符串
private String jsonObjectToString( T value ) throws AppException
{
try
{
ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter();
String strJson = ow.writeValueAsString( value );
return strJson;
}
catch ( JsonProcessingException e )
{
LOG.error( e.getMessage(), e );
throw new AppException( e );
}
}
2) 将字符串转换为对象
@SuppressWarnings( "unchecked" )
private T jsonStringToObject( String strJson, Class<?> clazz ) throws AppException
{
try
{
ObjectMapper mapper = new ObjectMapper();
T object = ( T ) mapper.readValue( strJson, clazz );
return object;
}
catch ( IOException e )
{
LOG.error( e.getMessage(), e );
throw new AppException( e );
}
}
@SuppressWarnings(“未选中”)
私有TJSonStringToObject(字符串strJson,类clazz)抛出AppException
{
尝试
{
ObjectMapper mapper=新的ObjectMapper();
T object=(T)mapper.readValue(strJson,clazz);
返回对象;
}
捕获(IOE异常)
{
LOG.error(e.getMessage(),e);
抛出新的AppException(e);
}
}
3) 转换泛型T以重置对象引用
private void yourMethod( CommonRq<T> rq ) throws AppException {
String newStrJson = jsonObjectToString( rq.getData() );
T newEntity = jsonStringToObject( newStrJson, getEntityClass() );
T result = this.mantenimientoService.create( newEntity );
}
private void yourMethod(CommonRq rq)抛出AppException{
字符串newStrJson=jsonObjectToString(rq.getData());
T newEntity=jsonStringToObject(newStrJson,getEntityClass());
T result=this.mantenimientoService.create(newEntity);
}
这对我来说很有用….1)将对象转换为字符串
private String jsonObjectToString( T value ) throws AppException
{
try
{
ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter();
String strJson = ow.writeValueAsString( value );
return strJson;
}
catch ( JsonProcessingException e )
{
LOG.error( e.getMessage(), e );
throw new AppException( e );
}
}
2) 将字符串转换为对象
@SuppressWarnings( "unchecked" )
private T jsonStringToObject( String strJson, Class<?> clazz ) throws AppException
{
try
{
ObjectMapper mapper = new ObjectMapper();
T object = ( T ) mapper.readValue( strJson, clazz );
return object;
}
catch ( IOException e )
{
LOG.error( e.getMessage(), e );
throw new AppException( e );
}
}
@SuppressWarnings(“未选中”)
私有TJSonStringToObject(字符串strJson,类clazz)抛出AppException
{
尝试
{
ObjectMapper mapper=新的ObjectMapper();
T object=(T)mapper.readValue(strJson,clazz);
返回对象;
}
捕获(IOE异常)
{
LOG.error(e.getMessage(),e);
抛出新的AppException(e);
}
}
3) 转换泛型T以重置对象引用
private void yourMethod( CommonRq<T> rq ) throws AppException {
String newStrJson = jsonObjectToString( rq.getData() );
T newEntity = jsonStringToObject( newStrJson, getEntityClass() );
T result = this.mantenimientoService.create( newEntity );
}
private void yourMethod(CommonRq rq)抛出AppException{
字符串newStrJson=jsonObjectToString(rq.getData());
T newEntity=jsonStringToObject(newStrJson,getEntityClass());
T result=this.mantenimientoService.create(newEntity);
}
这对我来说很有效……我最近遇到了类似的问题,在尝试创建/更新我的资源时遇到了类似的异常: bean类[org.springframework.hateoas.CollectionModel]的属性“id”无效:在回退访问期间找不到属性的字段 仔细查看后,我似乎在调用API时使用了错误的HTTP请求头(内容类型:text/uri list,而不是内容类型:application/json),因此无法对json负载进行反序列化
如果有人遇到类似的问题,只需进行共享,就可以在调试时为他们节省一些时间我最近遇到了类似的问题,并且在尝试创建/更新资源时遇到了类似的异常: bean类[org.springframework.hateoas.CollectionModel]的属性“id”无效:在回退访问期间找不到属性的字段 仔细查看后,我似乎在调用API时使用了错误的HTTP请求头(内容类型:text/uri list,而不是内容类型:application/json),因此无法对json负载进行反序列化
如果有人遇到类似的问题,只需分享一下,就可以在调试时为他们节省一些时间我在JPA中使用Projection时遇到过同样的问题 错误代码:
Optional<List<AbcProj>> getData(--);
可选的getData(-);
在进行以下更改后解决:
List<AbcProj> getData(--);
List getData(-);
我在JPA中使用Projection时遇到了同样的问题
错误代码:
Optional<List<AbcProj>> getData(--);
可选的getData(-);
决议