java.lang.noclassdeffounderror:Java/sql/time异常尝试发送补丁请求
我正在尝试制作一个更新实体的应用程序。服务器是使用Spring Boot制造的。 我正在尝试使用Unirest发送补丁请求,但是我得到了这个例外:
Exception in thread "JavaFX Application Thread" java.lang.NoClassDefFoundError: java/sql/Time
at com.google.gson.Gson.<init>(Gson.java:265)
at com.google.gson.Gson.<init>(Gson.java:186)
at [email protected]/kong.unirest.json.CoreFactory$JavaTypeAdapter.<init>(CoreFactory.java:54)
at [email protected]/kong.unirest.json.CoreFactory.<clinit>(CoreFactory.java:42)
at [email protected]/kong.unirest.json.JSONElement.<clinit>(JSONElement.java:38)
at [email protected]/kong.unirest.JsonNode.<init>(JsonNode.java:41)
at [email protected]/kong.unirest.JsonResponse.getNode(JsonResponse.java:40)
at [email protected]/kong.unirest.JsonResponse.<init>(JsonResponse.java:35)
at [email protected]/kong.unirest.apache.BaseApacheClient.transformBody(BaseApacheClient.java:60)
at [email protected]/kong.unirest.apache.ApacheClient.request(ApacheClient.java:132)
at [email protected]/kong.unirest.Client.request(Client.java:57)
at [email protected]/kong.unirest.BaseRequest.request(BaseRequest.java:359)
at [email protected]/kong.unirest.BaseRequest.asJson(BaseRequest.java:244)
at AplikacjaDoLogowania/com.Controller.FXMLImageMenuController.lambda$updateWindow$3(FXMLImageMenuController.java:176)
at javafx.base@19-ea/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
at javafx.base@19-ea/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:234)
at javafx.base@19-ea/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at javafx.base@19-ea/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at javafx.base@19-ea/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at javafx.base@19-ea/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base@19-ea/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at javafx.base@19-ea/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base@19-ea/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at javafx.base@19-ea/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base@19-ea/com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at javafx.base@19-ea/com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
at javafx.base@19-ea/javafx.event.Event.fireEvent(Event.java:198)
at javafx.graphics@19-ea/javafx.scene.Scene$KeyHandler.process(Scene.java:4089)
at javafx.graphics@19-ea/javafx.scene.Scene.processKeyEvent(Scene.java:2146)
at javafx.graphics@19-ea/javafx.scene.Scene$ScenePeerListener.keyEvent(Scene.java:2614)
at javafx.graphics@19-ea/com.sun.javafx.tk.quantum.GlassViewEventHandler$KeyEventNotification.run(GlassViewEventHandler.java:218)
at javafx.graphics@19-ea/com.sun.javafx.tk.quantum.GlassViewEventHandler$KeyEventNotification.run(GlassViewEventHandler.java:150)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
at javafx.graphics@19-ea/com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleKeyEvent$1(GlassViewEventHandler.java:250)
at javafx.graphics@19-ea/com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:424)
at javafx.graphics@19-ea/com.sun.javafx.tk.quantum.GlassViewEventHandler.handleKeyEvent(GlassViewEventHandler.java:249)
at javafx.graphics@19-ea/com.sun.glass.ui.View.handleKeyEvent(View.java:542)
at javafx.graphics@19-ea/com.sun.glass.ui.View.notifyKey(View.java:966)
at javafx.graphics@19-ea/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at javafx.graphics@19-ea/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:184)
at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: java.lang.ClassNotFoundException: java.sql.Time
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
... 41 more
我不知道为什么它是这样的,因为我没有
从服务器上更新任何时间值实体:
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import java.time.LocalDateTime;
@Entity
public class Entity{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private int scannerNumber;
private String loggedUser;
private boolean inService;
private LocalDateTime timeOfLogin;
public Entity() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getScannerNumber() {
return scannerNumber;
}
public void setScannerNumber(int scannerNumber) {
this.scannerNumber = scannerNumber;
}
public String getLoggedUser() {
return loggedUser;
}
public void setLoggedUser(String loggedUser) {
this.loggedUser = loggedUser;
}
public boolean isInService() {
return inService;
}
public void setInService(boolean inService) {
this.inService = inService;
}
public LocalDateTime getTimeOfLogin() {
return timeOfLogin;
}
public void setTimeOfLogin(LocalDateTime timeOfLogin) {
this.timeOfLogin = timeOfLogin;
}
}
从服务器中的控制器:
@RestController
public class EntityController{
private static final Logger logger = LoggerFactory.getLogger(ScannerController.class);
private final EntityRepository repository;
public EntityController(EntityRepository repository) {
this.repository = repository;
}
@GetMapping("/scanners")
ResponseEntity<List<Scanner>> findAll(){
return ResponseEntity.ok(repository.findAll());
}
@GetMapping("/scanners/{id}")
ResponseEntity<?> findById(@PathVariable int id){
if (repository.existsById(id)){
return ResponseEntity.ok(repository.findById(id));
} else {
logger.warn("Brak skanera o podanym numerze");
return ResponseEntity.notFound().build();
}
}
@GetMapping("/scanners/service/{param}")
ResponseEntity<List<Entity>> findByInService(@PathVariable boolean param){
return ResponseEntity.ok(repository.findByInService(param));
}
@PatchMapping("/scanners/{id}")
ResponseEntity<?>updateScanner(@PathVariable int id, @Valid Entity toUpdate){
if (repository.existsById(id)){
if(!repository.findById(id).get().isInService()){
Entity entity = toUpdate;
entity.setTimeOfLogin(LocalDateTime.now());
entity.setId(id);
repository.save(entity);
return ResponseEntity.noContent().build();
} else {
logger.info("Device in service");
return ResponseEntity.badRequest().build();
}
} else {
return ResponseEntity.notFound().build();
}
}
和我的补丁程序来自客户端应用程序的请求:
HttpResponse<JsonNode> request = Unirest.patch("http://localhost:8080/scanners/" + entity.getId())
.header("accept", "application/json")
.field("loggedUser", loggedUserTextField.getText())
.asJson();
I'm trying to make an application which updates an Entity. Server is made using Spring Boot.
I'm trying to send a PATCH request using Unirest, but I'm getting this exception:
Exception in thread "JavaFX Application Thread" java.lang.NoClassDefFoundError: java/sql/Time
at com.google.gson.Gson.<init>(Gson.java:265)
at com.google.gson.Gson.<init>(Gson.java:186)
at [email protected]/kong.unirest.json.CoreFactory$JavaTypeAdapter.<init>(CoreFactory.java:54)
at [email protected]/kong.unirest.json.CoreFactory.<clinit>(CoreFactory.java:42)
at [email protected]/kong.unirest.json.JSONElement.<clinit>(JSONElement.java:38)
at [email protected]/kong.unirest.JsonNode.<init>(JsonNode.java:41)
at [email protected]/kong.unirest.JsonResponse.getNode(JsonResponse.java:40)
at [email protected]/kong.unirest.JsonResponse.<init>(JsonResponse.java:35)
at [email protected]/kong.unirest.apache.BaseApacheClient.transformBody(BaseApacheClient.java:60)
at [email protected]/kong.unirest.apache.ApacheClient.request(ApacheClient.java:132)
at [email protected]/kong.unirest.Client.request(Client.java:57)
at [email protected]/kong.unirest.BaseRequest.request(BaseRequest.java:359)
at [email protected]/kong.unirest.BaseRequest.asJson(BaseRequest.java:244)
at AplikacjaDoLogowania/com.Controller.FXMLImageMenuController.lambda$updateWindow$3(FXMLImageMenuController.java:176)
at javafx.base@19-ea/com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
at javafx.base@19-ea/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:234)
at javafx.base@19-ea/com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at javafx.base@19-ea/com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at javafx.base@19-ea/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at javafx.base@19-ea/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base@19-ea/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at javafx.base@19-ea/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base@19-ea/com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at javafx.base@19-ea/com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at javafx.base@19-ea/com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at javafx.base@19-ea/com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
at javafx.base@19-ea/javafx.event.Event.fireEvent(Event.java:198)
at javafx.graphics@19-ea/javafx.scene.Scene$KeyHandler.process(Scene.java:4089)
at javafx.graphics@19-ea/javafx.scene.Scene.processKeyEvent(Scene.java:2146)
at javafx.graphics@19-ea/javafx.scene.Scene$ScenePeerListener.keyEvent(Scene.java:2614)
at javafx.graphics@19-ea/com.sun.javafx.tk.quantum.GlassViewEventHandler$KeyEventNotification.run(GlassViewEventHandler.java:218)
at javafx.graphics@19-ea/com.sun.javafx.tk.quantum.GlassViewEventHandler$KeyEventNotification.run(GlassViewEventHandler.java:150)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
at javafx.graphics@19-ea/com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleKeyEvent$1(GlassViewEventHandler.java:250)
at javafx.graphics@19-ea/com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:424)
at javafx.graphics@19-ea/com.sun.javafx.tk.quantum.GlassViewEventHandler.handleKeyEvent(GlassViewEventHandler.java:249)
at javafx.graphics@19-ea/com.sun.glass.ui.View.handleKeyEvent(View.java:542)
at javafx.graphics@19-ea/com.sun.glass.ui.View.notifyKey(View.java:966)
at javafx.graphics@19-ea/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at javafx.graphics@19-ea/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:184)
at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: java.lang.ClassNotFoundException: java.sql.Time
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
... 41 more
I don't know why it's behaving like that because I'm not updating any time value
Entity from server:
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import java.time.LocalDateTime;
@Entity
public class Entity{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private int scannerNumber;
private String loggedUser;
private boolean inService;
private LocalDateTime timeOfLogin;
public Entity() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getScannerNumber() {
return scannerNumber;
}
public void setScannerNumber(int scannerNumber) {
this.scannerNumber = scannerNumber;
}
public String getLoggedUser() {
return loggedUser;
}
public void setLoggedUser(String loggedUser) {
this.loggedUser = loggedUser;
}
public boolean isInService() {
return inService;
}
public void setInService(boolean inService) {
this.inService = inService;
}
public LocalDateTime getTimeOfLogin() {
return timeOfLogin;
}
public void setTimeOfLogin(LocalDateTime timeOfLogin) {
this.timeOfLogin = timeOfLogin;
}
}
Controller from server:
@RestController
public class EntityController{
private static final Logger logger = LoggerFactory.getLogger(ScannerController.class);
private final EntityRepository repository;
public EntityController(EntityRepository repository) {
this.repository = repository;
}
@GetMapping("/scanners")
ResponseEntity<List<Scanner>> findAll(){
return ResponseEntity.ok(repository.findAll());
}
@GetMapping("/scanners/{id}")
ResponseEntity<?> findById(@PathVariable int id){
if (repository.existsById(id)){
return ResponseEntity.ok(repository.findById(id));
} else {
logger.warn("Brak skanera o podanym numerze");
return ResponseEntity.notFound().build();
}
}
@GetMapping("/scanners/service/{param}")
ResponseEntity<List<Entity>> findByInService(@PathVariable boolean param){
return ResponseEntity.ok(repository.findByInService(param));
}
@PatchMapping("/scanners/{id}")
ResponseEntity<?>updateScanner(@PathVariable int id, @Valid Entity toUpdate){
if (repository.existsById(id)){
if(!repository.findById(id).get().isInService()){
Entity entity = toUpdate;
entity.setTimeOfLogin(LocalDateTime.now());
entity.setId(id);
repository.save(entity);
return ResponseEntity.noContent().build();
} else {
logger.info("Device in service");
return ResponseEntity.badRequest().build();
}
} else {
return ResponseEntity.notFound().build();
}
}
and my PATCH request from an client application:
HttpResponse<JsonNode> request = Unirest.patch("http://localhost:8080/scanners/" + entity.getId())
.header("accept", "application/json")
.field("loggedUser", loggedUserTextField.getText())
.asJson();
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
JSON补丁程序的内容类型应为应用程序/JSON-PATCH+JSON
对不起,我看到您仅使用了“补丁”,TBH JSON-PATCH据我说法更好。
Content-Type for JSON Patch requests should be application/json-patch+json
Sorry i see you used just "patch", tbh json-patch is better according to me.