@ResponseBody注解å¨methodä¸å
·ä½è¿åä»ä¹ç±»åçæ°æ®æµï¼jsonãxmlçï¼ä¸»è¦æ两个æ¹é¢å³å®çï¼1.æ¯å¦æ对åºç第ä¸æ¹jarå
åºç°å¨classpathï¼æ¯å¦jacksonjarãjaxb2
jarï¼å¦æåªåå¨springmvcå°±ä¼æ³¨å对åºçHttpMessageConvertï¼å°returnobjå为responseçæµæ¯é httpMessageConvertçå®ç°ç±»æ¥å®æçï¼2.æ@RequestMapping注解çconsumeså
·ä½çmediaTypesåhttp请æ±çacceptè½ç»æçmimetypeæ¥èåå³å®ãæè¿ä¸¤ç¹å³å®@ResponseBody注解çè¿åå¼çè¿åæµçç±»åå
·ä½çå®ç°åè§RequestResponseBodyMthodProcessorï¼javaä¸ï¼å
·ä½çåæµå®ç°å¦ä¸å¨AbstractMessageConverterMethodProcessor.writeWithMessageConverters()æ¥å®ç°çãå
·ä½ä»£ç ï¼
/** *Writesthegivenreturntypetothegivenoutputmessage. * *@paramreturnValuethevaluetowritetotheoutputmessage *@paramreturnTypethetypeofthevalue *@paraminputMessagetheinputmessages.Usedtoinspectthe{@codeAccept}header. *@paramoutputMessagetheoutputmessagetowriteto *@throwsIOExceptionthrownincaseofI/Oerrors *@throwsHttpMediaTypeNotAcceptableExceptionthrownwhentheconditionsindicatedby{@codeAccept}headeron *therequestcannotbemetbythemessageconverters */ @SuppressWarnings("unchecked") protected<T>voidwriteWithMessageConverters(TreturnValue, MethodParameterreturnType, ServletServerHttpRequestinputMessage, ServletServerHttpResponseoutputMessage) throwsIOException,HttpMediaTypeNotAcceptableException{ Class<?>returnValueClass=returnValue.getClass(); HttpServletRequestservletRequest=inputMessage.getServletRequest(); List<MediaType>requestedMediaTypes=getAcceptableMediaTypes(servletRequest); List<MediaType>producibleMediaTypes=getProducibleMediaTypes(servletRequest,returnValueClass); Set<MediaType>compatibleMediaTypes=newLinkedHashSet<MediaType>(); for(MediaTyper:requestedMediaTypes){ for(MediaTypep:producibleMediaTypes){ if(r.isCompatibleWith(p)){ compatibleMediaTypes.add(getMostSpecificMediaType(r,p)); } } } if(compatibleMediaTypes.isEmpty()){ thrownewHttpMediaTypeNotAcceptableException(producibleMediaTypes); } List<MediaType>mediaTypes=newArrayList<MediaType>(compatibleMediaTypes); MediaType.sortBySpecificityAndQuality(mediaTypes); MediaTypeselectedMediaType=null; for(MediaTypemediaType:mediaTypes){ if(mediaType.isConcrete()){ selectedMediaType=mediaType; break; } elseif(mediaType.equals(MediaType.ALL)||mediaType.equals(MEDIA_TYPE_APPLICATION)){ selectedMediaType=MediaType.APPLICATION_OCTET_STREAM; break; } } if(selectedMediaType!=null){ selectedMediaType=selectedMediaType.removeQualityValue(); for(HttpMessageConverter<?>messageConverter:messageConverters){ if(messageConverter.canWrite(returnValueClass,selectedMediaType)){ ((HttpMessageConverter<T>)messageConverter).write(returnValue,selectedMediaType,outputMessage); if(logger.isDebugEnabled()){ logger.debug("Written["+returnValue+"]as\""+selectedMediaType+"\"using["+ messageConverter+"]"); } return; } } } thrownewHttpMediaTypeNotAcceptableException(allSupportedMediaTypes); }
温馨提示:答案为网友推荐,仅供参考