SpringMVCを使って、json形式に応答して返した結果のタイプ


背景:
SpringMVCはどのようにJson形式のデータに応答しますか?
技術的実現
方法1:Controllerで@RertControllerを使用して注釈を付ける
方式2:Controllerで@Controllerを使って、返却方法に@ResponseBody注解を使って実現します。
jサポートのjarパッケージを導入する必要があります。jackson-annotations-2.2.2.jar jackson-core-2.2.2.jar jackson-databind-2.2.2.jar注意事項:
springMVCの下の実装はこの3つのパッケージのサポートが必要です。バージョンに注意してください。springMVC 4.0のバージョンに対応するパッケージjacksonは2.0以上であるべきです。
方法1:Controllerで@RertControllerを使用して注釈を付ける
ソースコードを見ることができますが、@RertControllerという注釈は組み合わせです。
1
それならControllerで@RestitControllerを使っても@Controller+@ResponseBodyの効果を達成しました。しかし、このcontrollerがこの注釈を使うと、このControllerに各方法でjson形式の文字列を返すように要求します。
開発が第三者口であれば、この注釈を使って開発します。

@RestController//          json      
public class ProductController {
	@RequestMapping("queryAll.do")
	public List<Product> queryAll() {
		
		//    
		List<Product> products = new ArrayList<>();
		for (int i = 1; i <= 10; i++) {
			Product p = new Product(i, "name" + i);
			products.add(p);
		}
		return products;
	}
}
Postmanを使って結果を確認します。
在这里插入图片描述
方式2:Controllerで@Controllerを使用する
戻る方法が必要な場合は@ResponseBodyを使って注釈を実行します。
このような組み合わせ注釈を用いて,Controller内の方法の戻り値を柔軟にすることができる。json形式の文字列だけに限らない。

@Controller
public class ProductController {
	@RequestMapping("queryAll.do")
	@ResponseBody //          ,              json      
	public List<Product> queryAll() {
		
		//    
		List<Product> products = new ArrayList<>();
		for (int i = 1; i <= 10; i++) {
			Product p = new Product(i, "name" + i);
			products.add(p);
		}
		return products;
	}
}
三つの方式でSprigMVCを実現し、Jsonデータに戻ります。
1、第一の方法
spring 2時代の製品です。つまりJsonビューcontrollerごとにJsonieを配置します。
例えば:

<bean id="defaultJsonView" class="org.springframework.web.servlet.view.json.MappingJacksonJsonView"/> 
または

<bean id="defaultJsonView" class="org.springframework.web.servlet.view.json.MappingJackson2JsonView"/>
同じjacksonのjarで包んでください。
2、第二の方法
JSONツールを使って対象をjsonに順番に並べて、常用ツールのJackson、fastjson、gson。
HttpServletResonseを利用して、reponse.get OutputStream()またはreponse.get Writer()を直接出力します。
例:

public class JsonUtil
{    
    private static Gson gson=new Gson();  
    /**
     * @MethodName : toJson
     * @Description :      JSON ,            
     * @param src
     *            :        
     * @return :    JSON 
     */
    public static String toJson(Object src) {
        if (src == null) {
            return gson.toJson(JsonNull.INSTANCE);
        }
        return gson.toJson(src);
    }
}
3、第三の方法
spring mvc 3を利用した注釈@ResponseBody
たとえば:

@ResponseBody
  @RequestMapping("/list")
  public List<String> list(ModelMap modelMap) {
    String hql = "select c from Clothing c ";
    Page<Clothing> page = new Page<Clothing>();
    page.setPageSize(6);
    page  = clothingServiceImpl.queryForPageByHql(page, hql);    
    return page.getResult();
  }
その後、スプリングmvcのデフォルト設定を使うと、jsonに戻りますが、jacksonのjarバッグが必要です。
注意:springMVC-servlet.xmlでを使用した場合、3.1前にAnnotationMethodhandlerAdapterをデフォルトで注入した場合、3.1以降はRequest MappingHandlerAdapterをデフォルトで注入します。
Request MappingHandler Adapterを手動で注入するなら、このように設定できます。
設定は以下の通りです

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"
  p:ignoreDefaultModelOnRedirect="true" >
   <property name="messageConverters">
    <list>
     <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>
    </list>
   </property>
  </bean>
パッケージを追加jackson-mapper-asl-*.jar jackson-core-asl-*.jar使い方がますます簡単になってきて、プログラマーがますます馬鹿になって、いいことか悪いことか分かりません。以上は個人の経験ですので、参考にしていただければと思います。よろしくお願いします。