새로운 JSR 353 API에 대해 특별한 HandlerMethodReturnValueHandler
이 없다는 것을 알게되면 매우 간단합니다. 대신이 경우 RequestResponseBodyMethodProcessor
(@ResponseBody
의 경우)은 MappingJackson2HttpMessageConverter
을 사용하여 처리기 메서드의 반환 값을 serialize합니다.
내부적으로 MappingJackson2HttpMessageConverter
은 ObjectMapper
을 사용합니다. 기본적으로 ObjectMapper
은 클래스의 getter를 사용하여 객체를 JSON에 직렬화합니다.
당신은 JSR 353의 Glassfish
의 프로 바이더의 구현을 사용하는 가정하면, 그 클래스는 org.glassfish.json.JsonObjectBuilderImpl$JsonObjectImpl
, org.glassfish.json.JsonStringImpl
및 org.glassfish.json.JsonNumberImpl
및 javax.json.JsonValue$3
(값 FALSE
에 대한 익명 클래스)입니다. JsonObjectImpl
는 (당신의 결과, 즉. 루트, 객체)는 Map
(특수 타입)입니다, ObjectMapper
는지도 키가 JSON 키입니다 JSON 키 - 값 쌍 요소 및지도 값으로지도의 항목을 직렬화
때문에 JSON 값입니다. 키에 대해서는 name
, age
및 married
과 같이 일련 번호가 올바르게 작동합니다. 값을 위해 위에서 언급 한 클래스와 각각의 getter 클래스를 사용합니다. 예를 들어, org.glassfish.json.JsonStringImpl
는
{"chars":"Dade","string":"Dade","valueType":"STRING"}
같은 다른 분야에 대해 적용되는 그러므로 JsonStringImpl
객체 (즉, 맵 엔트리의 값) 직렬화 자바 빈 게터를 사용
final class JsonStringImpl implements JsonString {
private final String value;
public JsonStringImpl(String value) {
this.value = value;
}
@Override
public String getString() {
return value;
}
@Override
public CharSequence getChars() {
return value;
}
@Override
public ValueType getValueType() {
return ValueType.STRING;
}
...
}
ObjectMapper
로서 구현 .
JSON을 올바르게 작성하려면 String
을 반환하면됩니다.
@RequestMapping("/test", produces="application/json")
@ResponseBody
public String test() {
JsonObject result = Json.createObjectBuilder()
.add("name", "Dade")
.add("age", 23)
.add("married", false)
.build();
return result.toString();
}
좀 더 복잡하지만 더 많은 보람을 느껴보세요.
어떤 API입니까? –
API로 @SotiriosDelimanolis, 당신은 JsonObject를 언급하고 있습니까? 그것은 JSR 프로세싱을위한 JSR 353 : Java API입니다.Question updated too – dade