【发布时间】:2021-09-04 22:44:09
【问题描述】:
我是一名初级 Web 开发人员,主要在 Spring Boot 上使用 java 完成工作。刚刚开始熟悉 javascript,现在遇到了一个与 stackoverflow 上的许多其他问题相似的问题,但不同之处似乎在于,使用 Postman 发布时一切正常,但是当通过 javascript 尝试使用浏览器时,我会得到一个415.
alert(JSON.stringify(task)) 给出(当“taskName”=“walk”时):{"name":"walk"}
当用 Postman POST 同一个 body 时,响应是:
{
"id": 65,
"name": "walk",
"new": false
}
jackson-databind、-core 和 -annotations 版本 2.10.1 的依赖项正在使用中。
java代码:
var url = contextRoot + "tasks"
var http = new XMLHttpRequest()
http.onreadystatechange = function() {
alert("readystatechange")
//if (this.readyState != 4) {
// return
//}
document.getElementById("received").innerHTML = this.responseText
}
function addTask() {
var task = {
name: document.getElementById("taskName").value
}
alert(JSON.stringify(task))
http.open("POST", url)
http.send(JSON.stringify(task))
}
我的@RestController
@RestController
public class TaskController {
@Autowired
private TaskRepository taskRepository;
@GetMapping("/tasks")
public List<Task> list() {
return taskRepository.findAll();
}
@PostMapping(path = "/tasks", consumes = "application/json", produces = "application/json")
public Task create(@RequestBody Task task) {
System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!");
System.out.println(task);
return taskRepository.save(task);
}
/*@PostMapping("/tasks")
public String create(@RequestBody String task) {
System.out.println("!!!!!!!!!!!!!!!!!!!!");
System.out.println(task);
return "hilipataheijjaa";
}*/
}
HTML
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<head lang="en">
<meta charset="UTF-8" />
<title>Tasks</title>
</head>
<body>
<h2>Tasks</h2>
<input type="text" id="taskName"/>
<button onclick="addTask()">Add Task</button>
<p id="received">
</p>
<script th:inline="javascript"> var contextRoot = /*[[@{/}]]*/ '';</script>
<script th:src="@{/javascript/tasks.js}" defer></script>
</body>
</html>
Task.java
import javax.persistence.Entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.jpa.domain.AbstractPersistable;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
public class Task extends AbstractPersistable<Long> {
private String name;
}
XMLHttpRequest.responseText:
{"timestamp":"2021-06-21T08:27:33.989+00:00","status":415,"error":"不支持 媒体 类型","trace":"org.springframework.web.HttpMediaTypeNotSupportedException: 不支持内容类型 'text/plain;charset=UTF-8'\r\n\tat org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.handleNoMatch(RequestMappingInfoHandlerMapping.java:227)\r\n\tat org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.lookupHandlerMethod(AbstractHandlerMethodMapping.java:422)\r\n\tat org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:367)\r\n\tat org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.getHandlerInternal(RequestMappingInfoHandlerMapping.java:110)\r\n\tat org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.getHandlerInternal(RequestMappingInfoHandlerMapping.java:59)\r\n\tat org.springframework.web.servlet.handler.AbstractHandlerMapping.getHandler(AbstractHandlerMapping.java:395)\r\n\tat org.springframework.web.servlet.DispatcherServlet.getHandler(DispatcherServlet.java:1234)\r\n\tat org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1016)\r\n\tat org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)\r\n\tat org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\r\n\tat org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)\r\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:652)\r\n\tat org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\r\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:733)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n\tat org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n\tat org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n\tat org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n\tat org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n\tat org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)\r\n\tat org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)\r\n\tat org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)\r\n\tat org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)\r\n\tat org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\r\n\tat org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)\r\n\tat org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)\r\n\tat org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373)\r\n\tat org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\r\n\tat org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)\r\n\tat org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1589)\r\n\tat org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\r\n\tat java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)\r\n\tat java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)\r\n\tat org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\r\n\tat java.base/java.lang.Thread.run(Thread.java:834)\r\n","message":"内容 type 'text/plain;charset=UTF-8' not supported","path":"/tasks"}
弹簧控制台: 2021-06-21 11:27:02.189 WARN 5152 --- [nio-8080-exec-8] .w.s.m.s.DefaultHandlerExceptionResolver:已解决 [org.springframework.web.HttpMediaTypeNotSupportedException:内容 类型 'text/plain;charset=UTF-8' not supported] 2021-06-21 11:27:33.988 警告 5152 --- [nio-8080-exec-5] .w.s.m.s.DefaultHandlerExceptionResolver :已解决 [org.springframework.web.HttpMediaTypeNotSupportedException:内容 type 'text/plain;charset=UTF-8' not supported]
提前致谢!
【问题讨论】:
-
javascript 应用程序是否与 web-apis 应用程序一起部署?
标签: javascript java spring-boot