我想在get方法中传递List!这是我的GeoPointRequest类:
mfirebaseFirestore.collection("Users").orderBy("email")
.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
for (QueryDocumentSnapshot querySnapshot : task.getResult()){
if (querySnapshot.get("email").equals(user.getEmail())){
mfirebaseFirestore.collection("Courses/"+ querySnapshot.get("idCorso")+"/Lessons")
.addSnapshotListener(new EventListener<QuerySnapshot>() {
@Override
public void onEvent(@Nullable QuerySnapshot documentSnapshots, @Nullable FirebaseFirestoreException e) {
for(DocumentChange doc : documentSnapshots.getDocumentChanges()){
if(doc.getType() == DocumentChange.Type.ADDED){
Lesson lesson = doc.getDocument().toObject(Lesson.class);
lessonList.add(lesson);
}
lessonsListAdapter = new LessonsListAdapter(lessonList, getApplicationContext());
lessonsListAdapter.notifyDataSetChanged();
}
}
});
}
}
}
});
但是当我这样做时,我有一个例外:
@Data
@AllArgsConstructor
@NoArgsConstructor
public class GeoPointRequest {
private Double lat;
private Double lon;
}
我的请求方法如下:
java.lang.NoSuchMethodException: java.util.List.<init>()
at java.base/java.lang.Class.getConstructor0(Class.java:3350)
at java.base/java.lang.Class.getDeclaredConstructor(Class.java:2554)
at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.createAttribute(ModelAttributeMethodProcessor.java:216)
at org.springframework.web.servlet.mvc.method.annotation.ServletModelAttributeMethodProcessor.createAttribute(ServletModelAttributeMethodProcessor.java:84)
at org.springframework.web.method.annotation.ModelAttributeMethodProcessor.resolveArgument(ModelAttributeMethodProcessor.java:139)
at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:127)
at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:167)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:134)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:892)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1039)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:897)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
我想构建类似的东西-@GetMapping(value = "/getPointsByPolygon")
public List<GeoPointModelResponse> getPointsByPolygon(List<GeoPointRequest> geoPointRequests) {
return searchService.getPointsByPolygon(geoPointRequests);
}
我在做什么错?如何解决?
答案 0 :(得分:0)
@RequestBody
可以与PutMapping
或PostMapping
一起添加。由于您使用的是GetMapping
,因此请求中没有任何正文。因此,您可以尝试使用@RequestParam
public List<GeoPointModelResponse> getPointsByPolygon(List<GeoPointRequest> geoPointRequests)
并删除@AllArgsConstructor
并
@NoArgsConstructor
。因为@Data
在一起有@ToString, @EqualsAndHashCode, @Getter / @Setter and @RequiredArgsConstructor
答案 1 :(得分:0)
您可能需要创建自己的转换器并将其绑定到Spring的DataBinder才能将路径变量转换为自定义对象。
来自Spring documenation - URI patterns:
URI变量会自动转换为适当的类型,或者引发TypeMismatchException。默认情况下支持简单类型(int,long,Date等),您可以注册对任何其他数据类型的支持。参见Type Conversion和DataBinder。