Spring MVC 학습노트의 json 형식 입력 및 출력
<!-- json -->
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-lgpl</artifactId>
<version>1.8.1</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-lgpl</artifactId>
<version>1.8.1</version>
</dependency>
먼저 이전의 Helloworld를 수정하세요.jsp, 클라이언트 json 형식의 데이터 입력을 추가합니다.
var cfg = {
type: 'POST',
data: JSON.stringify({userName:'winzip',password:'password',mobileNO:'13818881888'}),
dataType: 'json',
contentType:'application/json;charset=UTF-8',
success: function(result) {
alert(result.success);
}
};
function doTestJson(actionName){
cfg.url = actionName;
$.ajax(cfg);
}
앞의 분석에 의하면spring mvc에서 json 형식으로 입력된 데이터를 분석하는 방법은 두 가지가 있다. 하나는 @RequestBody를 사용하여 입력을 설정하는 것이다.
@RequestMapping("/json1")
@ResponseBody
public JsonResult testJson1(@RequestBody User u){
log.info("get json input from request body annotation");
log.info(u.getUserName());
return new JsonResult(true,"return ok");
}
2: HttpEntity를 사용하여 입력 바인딩
@RequestMapping("/json2")
public ResponseEntity<JsonResult> testJson2(HttpEntity<User> u){
log.info("get json input from HttpEntity annotation");
log.info(u.getBody().getUserName());
ResponseEntity<JsonResult> responseResult = new ResponseEntity<JsonResult>( new JsonResult(true,"return ok"),HttpStatus.OK);
return responseResult;
}
Json 형식의 출력도 두 가지 방법이 있습니다. 1: @responseBody를 사용하여 출력 내용을 context body 2로 설정합니다. 반환값은 ResponseEntity형식, context body를 되돌려줍니다. 세 번째 방식은 ContentNegotiatingViewResolver를 사용하여 출력을 json 형식으로 설정하는 것입니다. servlet context 프로필을 다음과 같이 수정해야 합니다.
<bean
class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
<property name="order" value="1" />
<property name="mediaTypes">
<map>
<entry key="json" value="application/json" />
</map>
</property>
<property name="defaultViews">
<list>
<bean
class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
</list>
</property>
<property name="ignoreAcceptHeader" value="true" />
</bean>
그러나 이 형식의 출력은 {model 클래스 이름: {내용}}의 json 형식을 되돌려줍니다. 예를 들어 다음 코드입니다.
@RequestMapping("/json3.json")
public JsonResult testJson3(@RequestBody User u){
log.info("handle json output from ContentNegotiatingViewResolver");
return new JsonResult(true,"return ok");
}
원하는 반환은 {success:true,message:"return ok"}입니다.그러나 실제 되돌아오는 것은 {'json Result': {'success':true,'msg':'return ok'}} 왜냐하면 Mapping Jackson JsonView에서 되돌아오는 값에 대한 처리가 모델맵에 있는 값이 하나만 있는 상황을 고려하지 않고 맵Name:{map Result}의 형식에 따라 수치를 되돌려주기 때문이다.수정 방법, MappingJacksonJsonView 클래스를 다시 불러오고 filterModel을 다시 쓰는 방법은 다음과 같습니다.
protected Object filterModel(Map<String, Object> model) {
Map<?, ?> result = (Map<?, ?>) super.filterModel(model);
if (result.size() == 1) {
return result.values().iterator().next();
} else {
return result;
}
}
ContentNegotiatingViewResolver 의 수정 사항은 다음과 같습니다.
<bean
class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
<property name="order" value="1" />
<property name="mediaTypes">
<map>
<entry key="json" value="application/json" />
</map>
</property>
<property name="defaultViews">
<list>
<bean
class="net.zhepu.json.MappingJacksonJsonView" />
</list>
</property>
<property name="ignoreAcceptHeader" value="true" />
</bean>
이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thymeleaf로 HTML 페이지를 동적으로 만듭니다 (spring + gradle)지난번에는 에서 화면에 HTML을 표시했습니다. 이번에는 화면을 동적으로 움직여보고 싶기 때문에 입력한 문자를 화면에 표시시키고 싶습니다. 초보자의 비망록이므로 이상한 점 등 있으면 지적 받을 수 있으면 기쁩니다! ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.