[SPRING] angularjs + 봄 mvc + json 게시물 요청
SPRINGangularjs + 봄 mvc + json 게시물 요청
나는 나의 문제에 관한 웹에 대한 연구를 해왔고, 나의 코드는 대부분의 예제에서 쓰여진 것을 반영한다고 느낀다. 그러나 아직은 효과가 없다. 따라서 내 질문.
긴 이야기하자면, 일부 "백엔드"에 새 항목을 추가하기위한 POST 요청을 보내려고합니다. REST API의 경우 Spring MVC를 사용하는데 AngularJS에서 $ http를 사용하여 요청을 보냅니다.
그것이 POST 요청을 호출하는 방법입니다.
$scope.testAddItem = function(){
$http({
'url' : 'addNewItem',
'method' : 'POST',
'headers': {'Content-Type' : 'application/json'},
'data' : $scope.newItem
}).success(function(data){
$scope.marketForm.texts.push({'text' : data.text});
})
}
올바른 URL로 매핑됩니다. 문제는 다음과 같은 응답을받는 것입니다.
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
<title>Error 400 BAD_REQUEST</title>
</head>
<body><h2>HTTP ERROR 400</h2>
<p>Problem accessing /poll/addNewItem/. Reason:
<pre> BAD_REQUEST</pre></p><hr /><i><small>Powered by Jetty://</small></i><br/>
웹 사이트의 버튼을 클릭 할 때 및 일부 REST 클라이언트를 통해 테스트 할 때이 오류가 발생합니다.
내 pom.xml에 포함 된 종속성
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.2.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.2.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.2.3</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
한 메모 - GET을 통한 다른 요청 보내기
내 컨트롤러 클래스
@Controller
@RequestMapping(value = "/")
public class PollController {
@RequestMapping(method = RequestMethod.GET)
public String mainPage(){
return "poll";
}
@RequestMapping(value = "/getNewElement")
public @ResponseBody
List<PollItem> getNewElement(){
List<PollItem> listOfItems = new ArrayList<PollItem>(2);
listOfItems.add(new PollItem("test 1"));
listOfItems.add(new PollItem("test 2"));
return listOfItems;
}
@RequestMapping(value = "/addNewItem", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody PollItem addNewElement(@RequestBody PollItem pollItem){
pollItem.setId(2); // I know it makes no logical sense, but it's just for testing.
return pollItem;
}
}
모든 단서?
편집하다
디버그 모드를 추가 한 후 일부 JSON 구문 분석 문제가있는 것으로 보입니다.
Method [public com.poll.model.PollItem com.poll.controller.PollController.addNewElement(com.poll.model.PollItem)]
org.springframework.http.converter.HttpMessageNotReadableException: Could not read JSON: Unexpected character ('a' (code 97)): expected a valid value (number, String, arr
ay, object, 'true', 'false' or 'null')
at [Source: HttpInputOverHTTP@5ce15706; line: 1, column: 2]; nested exception is org.codehaus.jackson.JsonParseException: Unexpected character ('a' (code 97)): expected
a valid value (number, String, array, object, 'true', 'false' or 'null')
at [Source: HttpInputOverHTTP@5ce15706; line: 1, column: 2]
at org.springframework.http.converter.json.MappingJacksonHttpMessageConverter.readJavaType(MappingJacksonHttpMessageConverter.java:187)
at org.springframework.http.converter.json.MappingJacksonHttpMessageConverter.read(MappingJacksonHttpMessageConverter.java:179)
at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodAr
gumentResolver.java:138)
at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:183)
at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:98)
at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:79)
at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:157)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:124)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:749)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:689)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:738)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:551)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:568)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:221)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1111)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:478)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:183)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1045)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:199)
at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:109)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
at org.eclipse.jetty.server.Server.handle(Server.java:462)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:279)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:232)
at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:534)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:607)
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:536)
at java.lang.Thread.run(Thread.java:724)
Caused by: org.codehaus.jackson.JsonParseException: Unexpected character ('a' (code 97)): expected a valid value (number, String, array, object, 'true', 'false' or 'null'
)
at [Source: HttpInputOverHTTP@5ce15706; line: 1, column: 2]
at org.codehaus.jackson.JsonParser._constructError(JsonParser.java:1433)
at org.codehaus.jackson.impl.JsonParserMinimalBase._reportError(JsonParserMinimalBase.java:521)
at org.codehaus.jackson.impl.JsonParserMinimalBase._reportUnexpectedChar(JsonParserMinimalBase.java:442)
at org.codehaus.jackson.impl.Utf8StreamParser._handleUnexpectedValue(Utf8StreamParser.java:2090)
at org.codehaus.jackson.impl.Utf8StreamParser._nextTokenNotInObject(Utf8StreamParser.java:606)
at org.codehaus.jackson.impl.Utf8StreamParser.nextToken(Utf8StreamParser.java:492)
at org.codehaus.jackson.map.ObjectMapper._initForReading(ObjectMapper.java:2770)
at org.codehaus.jackson.map.ObjectMapper._readMapAndClose(ObjectMapper.java:2718)
at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1923)
at org.springframework.http.converter.json.MappingJacksonHttpMessageConverter.readJavaType(MappingJacksonHttpMessageConverter.java:184)
... 38 more
놀이
그것은 작동하는 것, 문제는 그것이 "(큰 따옴표)를 어디에 내가 작은 따옴표를 사용하고 싶습니다 지원합니다. 내가 JSON 할 때 항상 따옴표를 사용해야하는 이유가 있습니까?
그리고 JSON 매퍼의 기본 동작을 변경하려면 어떻게해야합니까?
해결법
-
==============================
1.좋아, 질문에 대답 - 문제는 내가 심하게 형식 JSON을 사용했다. 나는 작은 따옴표 대신에 큰 따옴표를 사용해야한다. (기본적으로 JSON 표준을 따르고있다.) 나는 이것에 익숙하지 않고 약간의 혼란 스러웠다. 많은 웹 사이트가 그들의 예제에 작은 따옴표를 사용하기 때문에 - 예를 들어 구글 차트 ).
좋아, 질문에 대답 - 문제는 내가 심하게 형식 JSON을 사용했다. 나는 작은 따옴표 대신에 큰 따옴표를 사용해야한다. (기본적으로 JSON 표준을 따르고있다.) 나는 이것에 익숙하지 않고 약간의 혼란 스러웠다. 많은 웹 사이트가 그들의 예제에 작은 따옴표를 사용하기 때문에 - 예를 들어 구글 차트 ).
{"id":10,"text":"smth smth"}
좋다
{'id':10,'text':'smth smth'}
나쁘다:)
-
==============================
2.JSON이 서버 측 객체와 올바르게 매핑되지 않은 경우 예외가 발생합니다. 나는 당신이 찾고있는 것을 정확하게 작동시키는 아주 좋은 간단한 예제를 발견했다.
JSON이 서버 측 객체와 올바르게 매핑되지 않은 경우 예외가 발생합니다. 나는 당신이 찾고있는 것을 정확하게 작동시키는 아주 좋은 간단한 예제를 발견했다.
AngularJS 포스트 봄 MVC JSON 예제
AngularJS 양식 게시 봄 MVC JSON
-
==============================
3.PollItem 도메인에 기본 생성자가 누락되었을 수 있습니다.
PollItem 도메인에 기본 생성자가 누락되었을 수 있습니다.
public class PollItem { public PollItem () { } //your rest of the codes }
이 코드를 추가하면 코드가 올바르게 작동합니다.
PollItem에 정의 된 생성자가 이미 있으므로 기본 생성자가됩니다. Therfore 더미 생성자를 추가하여 문제를 해결할 것입니다
from https://stackoverflow.com/questions/22881534/angularjs-spring-mvc-json-post-request by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 다른 DAO에서 하나의 DAO를 호출합니까? (0) | 2019.03.23 |
---|---|
[SPRING] 스프링 보안 자바 설정 (0) | 2019.03.23 |
[SPRING] Spring 3.0 애플리케이션에서 Hibernate 통계를 어떻게 설정 하는가? (0) | 2019.03.23 |
[SPRING] 스프링 시큐리티를 사용하여 패스워드를 몰라도 자동으로 사용자로 로그인하는 방법? (0) | 2019.03.23 |
[SPRING] 로그 아웃 한 후 페이지를 확보하지 못하고 뒤로 버튼을 클릭하십시오. (0) | 2019.03.23 |