1. 程式人生 > >SpringMVC的ResponseBody註解及自定義型別

SpringMVC的ResponseBody註解及自定義型別

建立自定義類

根據專案需要定義成員變數

public class AkResponse implements Serializable {
    private String msg;
    private String code;
    private Object data;
    private Boolean succ;

    public static AkResponse genSucc(Object data) {
        AkResponse a = new AkResponse();
        a.setSucc(true);
        a.setCode("1"
); a.setMsg("success"); a.setData(data); return a; } public static AkResponse genFail(Exception e) { AkResponse a = new AkResponse(); a.setSucc(false); a.setMsg(e.getMessage()); a.setCode("0"); return a; } //getter,setter }

建立自定義的converter

public class AkResponseConverter extends AbstractHttpMessageConverter<AkResponse> {
    /**字元編碼utf-8*/
    public final static Charset UTF8 = Charset.forName("UTF-8");
    private Charset charset = UTF8;
    public AkResponseConverter() {
        super(new MediaType("application"
, "json", UTF8), new MediaType("application", "*+json", UTF8)); } /**判斷是否是支援的型別*/ @Override protected boolean supports(Class<?> clazz) { if (clazz.equals(AkResponse.class)) { return true; } return false; } @Override protected AkResponse readInternal(Class<? extends AkResponse> clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException { //沒有處理使用者的傳送過來的請求 return null; } @Override protected void writeInternal(AkResponse obj, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException { OutputStream out = outputMessage.getBody(); String text = null; if (null != obj) { //將obj轉為json字串 text = JSONObject.fromObject(obj).toString(); byte[] bytes = text.getBytes(charset); //輸出到out out.write(bytes); } } }

在spring-mvc.xml中對自定義的converter進行設定

<mvc:annotation-driven>
    <mvc:message-converters>
        .......
        <bean class="cn.akioyuan.core.converter.AkResponseConverter" />
    </mvc:message-converters>
</mvc:annotation-driven>

在Controller中返回自定義型別

必須新增@ResponseBody註解

@Controller
@RequestMapping(value = "/member")
public class MemberController extends BaseController {
    ......
    @RequestMapping(value = "/all")
    @ResponseBody
    public AkResponse all() {
        try {
            Map<String, List<CourseDto>> map = courseService.listAll();
            return AkResponse.genSucc(map);
        } catch (Exception e) {
            return AkResponse.genFail(e);
        }
    }
    ......
}

伺服器返回的資料

{"code":"1","data":{......},"msg":"success","succ":true}

頁面處理返回值

<script>
$.ajax({
    url : '.....',
    dataType : 'json',
    type : 'POST',
    beforeSend : function() {
        ......
    },
    success : function(data) {
            if (data.succ) {
                data = data.data;
                $.each(data,function(i, v) {
                    console.log(i + '->' + v);
                    ......
                });
                .......
            }
    },
    error : function() {
    }
});
</script>

小結

感覺比在Controller中直接返回JSONObject要高大上那麼一點點。

相關推薦

SpringMVC的ResponseBody註解定義型別

建立自定義類 根據專案需要定義成員變數 public class AkResponse implements Serializable { private String msg;

hibernate validation內置註解定義註解

ons private from decimal 最重要的 con name cts mva 1 Bean Validation 中內置的 constraint 2 @Null 被註釋的元素必須為 null 3 @NotNull

C++中堆的使用定義型別排序

簡介 C++中堆(heap)是在vector的基礎上實現的。具體地,是定義了一些方法在vector型別資料上進行操作,包括 - make_heap 建立堆(預設最大堆) - push_heap 加入元素 - pop_heap 刪除元素 - sort_h

java 註解分析定義註解

var AC IE 原始類型 length JD email 文檔 生成 註解概念:   java提供了一種原程序中的元素關聯任何信息和任何元數據的途徑與方法。 註解分類: 運行機制分類:源碼註解,編譯時註解,運行時註解。  來源分類:JDK的註解,第三方註解,自

JAVA高階基礎(10)---TreeSet對定義型別進行定製排序增強for迴圈遍歷集合

TreeSet 自然排序 對於自定義型別,那麼要實現自然排序,需要去 Comparable 介面中的 compareTo 方法。在 compare To 方法中我們可以根據自己的業務要求,來實現自己的排序規則。 定製排序     在建立容器

@Constraint註解配合定義驗證型別註解的開發

前言:雖然現在有很多很有用的驗證註解,如@not null,@not blank,@not [email protected]等等。但是我們可能有時候根據專案的拓展這些驗證註解不夠用,那怎麼辦,解決的辦法就是自定義驗證註解   1,@Constraint註解 說到自定

(七)MapReduce定義型別分割槽演算法

需求 有以下資料:電話 | 地區 | 姓名 | 使用流量 三個reduce生成三個檔案,按照地區來分割槽,得到每個人使用流量的彙總結果。 13877779999 bj zs 2145 13766668888 sh ls 1028 13766668888 sh ls 9987 1387

Java註解教程定義註解

Java註解提供了關於程式碼的一些資訊,但並不直接作用於它所註解的程式碼內容。在這個教程當中,我們將學習Java的註解,如何定製註解,註解的使用以及如何通過反射解析註解。 Java1.5引入了註解,當前許多java框架中大量使用註解,如Hibernate、Jersey、Spring。註解作為程

基於SSM利用SpringAOP切面定義註解 記錄每次操作記錄(操作日誌 同理)

前段時間根據業務需求要記錄每次操作時的相關資訊:本帖方式通過在SpringMVC中的Controller設定一個自定義註解類來進行對資料的接收,通過 SpringAOP切面來對接收的資料進行邏輯處理. 在事先根據業務需求建立的一個實體類(如: UploadCount)的基礎

MapReduce資料型別定義MapReduce資料型別

MapReduce資料型別 資料型別都要實現Writable介面,以便用這些型別定義的資料可以被序列化進行網路傳輸和檔案儲存。自定義key資料型別的時候,因為需要對key進行排序,需要繼承java中的比較器,所以可以直接繼承WritableComparable

Spring 和 java 反射定義註解的問題解決!!

我想做一個將  使用者操作記錄儲存到資料庫的功能,利用java 的反射和自定義annotation 來實現,具體程式碼如下: 自定義annotation  類: package com.util; import java.lang.annotation.Documented;

詳解Java註解教程定義註解

     自Java5.0版本引入註解之後,它就成為了Java平臺中非常重要的一部分。開發過程中,我們也時常在應用程式碼中會看到諸如@Override,@Deprecated這樣的註解。這篇文章中,我將向大家講述到底什麼是註解,為什麼要引入註解,註解是如何工作的,如何編寫自

Struts2的型別轉換輸入校驗(定義型別轉換器)

typeconverter2.jsp <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ taglib uri="/struts-tags" prefix="s"

spring註解 ComponentScan、定義型別過濾器

        @ComponentScan註解,掃描哪些包下,將掃描到的包下的元件加入到容器中,這是一個常見的用法,如@ComponentScan(value = "me.xf"),對掃描到的包下的元件,處理哪些元件可以加入到容器中,哪些元件型別的,不可以加入到容器中,這裡

JAVA-註解(2)-定義註解反射註解

自定義註解開發   1.開發一個註解類     開發一個註解類的過程,非常類似於開發一個介面,只不過需要通過@interface關鍵字來宣告   2.使用元註解修飾註解的宣告     所謂的原註解是用來修飾註解宣告的註釋,可以控制被修飾的註解的特性。     @Target       用來宣告被

Spring Boot @Enable*註解原始碼解析定義@Enable*

  Spring Boot 一個重要的特點就是自動配置,約定大於配置,幾乎所有元件使用其本身約定好的預設配置就可以使用,大大減輕配置的麻煩。其實現自動配置一個方式就是使用@Enable*註解,見其名知其意也,即“使什麼可用或開啟什麼的支援”。 ### Spring Boot 常用@Enable* 首先來簡

Laravel之加密解密/日誌/異常處理定義錯誤

文件中 例如 tom 處理器 crypt return cat 情況 而不是 一.加密解密 1.加密Crypt::encrypt($request->secret) 2.解密try {   $decrypted = Crypt::decrypt($encryptedV

shiro授權定義realm授權(七)

qbc mtp jbd red es6 sil llb wmi sin 1.授權流程 2. 三種授權方法          Shiro 支持三種方式的授權: 編程式:通過寫if/else 授權代碼塊完成: Subject subject = SecurityU

Springboot-讀取核心配置文件定義配置文件

定義 自定義配置文件 () 創建 ble get 兩個 ash dex 讀取核心配置文件 核心配置文件是指在resources根目錄下的application.properties或application.yml配置文件,讀取這兩個配置文件的方法有兩種,都比較簡單。 核

weex 項目開發(五)定義 過濾函數 和 混合 定義 Header 組件

定義 blog weex top ber slice ear notice earch 1.自定義 過濾函數 src / filters / index.js /** * 自定義 過濾函數 */ export function host (url) { if (