JFinal

登录 注册

jfinal关联查询的model如何在springboot中优雅返回

我们知道jfinal关联查询的结果是无法通过fastjson完整转化为json串的,因为一些关联属性并没有get set方法。

它原声不支持,我们就要创造条件让他支持

思路:重写fastjson的类,增加处理activerecord的逻辑

框架 : springboot + jfinal dao

1.重写fastjson的方法

package com.sj.configuration.json;

import java.io.IOException;
import java.io.OutputStream;
import java.nio.charset.Charset;

import org.springframework.http.HttpOutputMessage;
import org.springframework.http.converter.HttpMessageNotWritableException;

import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
import com.jfinal.kit.JsonKit;
import com.jfinal.plugin.activerecord.Model;

public class JFastJsonHttpMessageConverter extends FastJsonHttpMessageConverter{
    public static final Charset UTF8 = Charset.forName("UTF-8");

	@Override
	protected void writeInternal(Object object, HttpOutputMessage outputMessage)
			throws IOException, HttpMessageNotWritableException {
		if(object instanceof Model) {
			OutputStream out = outputMessage.getBody();
			out.write(JsonKit.toJson(object).getBytes(UTF8));
		}else {
			super.writeInternal(object, outputMessage);
		}
	}
	
}


主要是这一段

if(object instanceof Model) {}


2.注册json处理器

package com.sj.configuration.app;

import java.util.ArrayList;
import java.util.List;

import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;

import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.support.config.FastJsonConfig;
import com.sj.configuration.json.JFastJsonHttpMessageConverter;

@Configuration
public class AppConfiguration {
	@Bean
	public HttpMessageConverters fastJsonHttpMessageConventers() {
		JFastJsonHttpMessageConverter converter = new JFastJsonHttpMessageConverter();
        FastJsonConfig config = new FastJsonConfig();
        List<MediaType> mediaTypes = new ArrayList<MediaType>();
        mediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
        config.setSerializerFeatures(SerializerFeature.PrettyFormat);
        converter.setSupportedMediaTypes(mediaTypes);
        converter.setFastJsonConfig(config);
        HttpMessageConverter<?> converter1 = converter;
        return new HttpMessageConverters(converter1);
	}
}

这里面就用到了我们自己写的

JFastJsonHttpMessageConverter

我们看一下效果

image.png

package com.sj.contorller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.sj.model.SysUser;

@RestController
public class TestController {
	@RequestMapping("/user")
	public SysUser user() {
		SysUser user = new SysUser();
		user.setUsername("name");
		user.setUserid("id");
		user.put("xx", "abc");
		return user;
	}
}

大家看到 xx也被打印出来了

大功告成

评论