Skip to content

Instantly share code, notes, and snippets.

@ayaysir
Last active October 29, 2018 02:22
Show Gist options
  • Save ayaysir/3ec240bd04ac08f3e63a3430ec458266 to your computer and use it in GitHub Desktop.
Save ayaysir/3ec240bd04ac08f3e63a3430ec458266 to your computer and use it in GitHub Desktop.
JspMvcHelper.java for Spring MVC
import java.lang.reflect.Array;
import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.springframework.ui.Model;
import org.springframework.web.servlet.ModelAndView;
public class JspMvcHelper {
private String outputString;
public JspMvcHelper(ModelAndView mav){
outputString = help(mav.getModel(), false, false);
}
public JspMvcHelper(ModelAndView mav, boolean isThisForJSConsole){
outputString = help(mav.getModel(), isThisForJSConsole, false);
}
public JspMvcHelper(ModelAndView mav, boolean isThisForJSConsole, boolean isWholeStringWrap)
{
outputString = help(mav.getModel(), isThisForJSConsole, isWholeStringWrap);
}
public JspMvcHelper(Model m){
outputString = help(m.asMap(), false, false);
}
public JspMvcHelper(Model m, boolean isThisForJSConsole){
outputString = help(m.asMap(), isThisForJSConsole, false);
}
public JspMvcHelper(Model m, boolean isThisForJSConsole, boolean isWholeStringWrap)
{
outputString = help(m. asMap(), isThisForJSConsole, isWholeStringWrap);
}
public String help(Map<String, ?> mm, boolean isThisForJSConsole, boolean isWholeStringWrap)
{
// ModelMap mm = mav.getModelMap();
StringBuilder sb = new StringBuilder();
sb.append("********** 변수 목록 **********" + "\n");
sb.append(mm.keySet() + "\n\n");
sb.append("********** 변수 상세 ********** \n《[타입] 변수명 → 값(toString)》" + "\n\n");
for(String key : mm.keySet()){
Class<? extends Object> c = mm.get(key).getClass();
sb.append("[" + c.getName() + "] " + key + " → " + mm.get(key) + "\n");
}
sb.append("\n");
sb.append("********** 타입 상세 **********" + "\n");
for(String key: mm.keySet()){
Class<? extends Object> c = mm.get(key).getClass();
List<Field> fs = recursiveGetField(c);
sb.append("[" + c.getName() + "] " + key + "\n");
try{
String superName = c.getSuperclass().getSimpleName();
if(c.getPackage().getName().equals("java.lang")){
sb.append("\n");
continue;
} else if (superName.equals("AbstractList") || superName.equals("List")){
sb.append(" - ");
List<?> tempList = (List<?>) mm.get(key);
sb.append(tempList + "\n\n");
continue;
} else if (superName.equals("AbstractMap") || superName.equals("Map")){
Map<?, ?> tempMap = (Map<?, ?>) mm.get(key);
for(Object oKey : tempMap.keySet()){
sb.append( " - " + oKey + "=" + tempMap.get(oKey) + "\n");
}
sb.append("\n");
continue;
} else if (superName.equals("AbstractSet") || superName.equals("Set")){
sb.append(" - ");
Set<?> tempList = (Set<?>) mm.get(key);
sb.append(tempList + "\n\n");
continue;
}
} catch (Exception e){
System.err.println(c.getName() + ": "+ e);
if (c.isArray()){
sb.append(" - ");
if (c.isPrimitive()) {
int length = Array.getLength(mm.get(key));
Object[] tempArr = new Object[length];
for (int i = 0; i < length; i++) {
tempArr[i] = Array.get(mm.get(key), i);
}
sb.append(Arrays.toString(tempArr) + "\n");
}
else {
Object[] tempArr = (Object[]) mm.get(key);
sb.append(Arrays.toString(tempArr) + "\n");
}
sb.append("\n");
continue;
}
}
for(Field f : fs){
sb.append(" - " + f.getType().getSimpleName() + " " + f.getName() + "\n");
}
sb.append("\n");
}
sb.append("********** 제너릭 타입 상세(β) **********" + "\n");
for(String key: mm.keySet()){
Class<? extends Object> c = mm.get(key).getClass();
// List<Field> fs = recursiveGetField(c);
try{
String superName = c.getSuperclass().getSimpleName();
if (superName.equals("AbstractList") || superName.equals("List")){
List<?> tempList = (List<?>) mm.get(key);
if(tempList != null){
Class<? extends Object> innerClass = tempList.get(0).getClass();
List<Field> innerFs = recursiveGetField(innerClass);
sb.append(key + ": [" + innerClass.getName() + "] " + "\n");
if(!innerClass.getPackage().getName().equals("java.lang")){
for(Field f : innerFs){
sb.append(" - " + f.getType().getSimpleName() + " " + f.getName() + "\n");
}
}
}
sb.append("\n");
continue;
} else if (superName.equals("AbstractMap") || superName.equals("Map")){
Map<?, ?> tempMap = (Map<?, ?>) mm.get(key);
Object firstKey = tempMap.keySet().iterator().next();
Object firstValue = tempMap.get(firstKey);
if( firstKey != null && firstValue != null){
Class<? extends Object> innerKeyClass = firstKey.getClass();
Class<? extends Object> innerValueClass = firstValue.getClass();
List<Field> innerKeyFs = recursiveGetField(innerKeyClass);
List<Field> innerValueFs = recursiveGetField(innerValueClass);
sb.append(key + ":\n");
sb.append(" key: [" + innerKeyClass.getName() + "] " + "\n");
if(!innerKeyClass.getPackage().getName().equals("java.lang")){
for(Field f : innerKeyFs){
sb.append(" - " + f.getType().getSimpleName() + " " + f.getName() + "\n");
}
}
sb.append(" value: [" + innerValueClass.getName() + "] " + "\n");
if(!innerValueClass.getPackage().getName().equals("java.lang")){
for(Field f : innerValueFs){
sb.append(" - " + f.getType().getSimpleName() + " " + f.getName() + "\n");
}
}
}
sb.append("\n");
continue;
} else if (superName.equals("AbstractSet") || superName.equals("Set")){
Set<?> tempSet = (Set<?>) mm.get(key);
Object first = tempSet.iterator().next();
if( first != null){
Class<? extends Object> innerClass = first.getClass();
List<Field> innerFs = recursiveGetField(innerClass);
sb.append(key + ": [" + innerClass.getName() + "] " + "\n");
if(!innerClass.getPackage().getName().equals("java.lang")){
for(Field f : innerFs){
sb.append(" - " + f.getType().getSimpleName() + " " + f.getName() + "\n");
}
}
}
sb.append("\n");
continue;
}
} catch (Exception e){
System.err.println(c.getName() + ": "+ e);
if (c.isArray()){
sb.append(" - ");
if (c.isPrimitive()) {
int length = Array.getLength(mm.get(key));
Object[] tempArr = new Object[length];
for (int i = 0; i < length; i++) {
tempArr[i] = Array.get(mm.get(key), i);
}
sb.append(Arrays.toString(tempArr) + "\n");
}
else {
Object[] tempArr = (Object[]) mm.get(key);
sb.append(Arrays.toString(tempArr) + "\n");
}
sb.append("\n");
continue;
}
}
}
if(isThisForJSConsole) {
if(isWholeStringWrap){
return "\"" + sb.toString().replace("\n", "\\n\" + \n\"") + "\"";
} else {
return sb.toString().replace("\n", "\\n\" + \n\"");
}
} else {
return sb.toString();
}
}
public List<Field> recursiveGetField(Class<?> c){
List<Field> a = new ArrayList<>();
Field[] fs = c.getDeclaredFields();
a.addAll(Arrays.asList(fs));
Class<? extends Object> superClass = c.getSuperclass();
if(superClass != null){
a.addAll( recursiveGetField(superClass) );
}
return a;
}
@Override
public String toString() {
return outputString;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment